0

我有一个正在运行的测试脚本,它在 2 周前停止工作。测试是登录Hotmail,点击新邮件,在正文中填写邮箱地址、主题、正文,发送邮件。目前我无法在邮件正文中输入文本。我尝试了 ID、CSS 和 Xpath。我也尝试使用选择框架,但无济于事。我已附上 Python 代码,希望能得到帮助...

该脚本的目的是通过 Wireshark 捕获流量,专门用于使用当前 Hotmail 协议的 Hotmail 发送邮件。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class HotmailloginpythonWebdriver(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://login.live.com/"
        self.verificationErrors = []

    def test_hotmailloginpython_webdriver(self):
        driver = self.driver
        driver.get(self.base_url + "/login.srf?wa=wsignin1.0&rpsnv=11&ct=1321965448&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=1033&id=64855&mkt=en-us&cbcxt=mai&snsc=1")
        driver.find_element_by_id("i0116").clear()
        driver.find_element_by_id("i0116").send_keys("address@hotmail.com")
        driver.find_element_by_id("i0118").clear()
        driver.find_element_by_id("i0118").send_keys("password")
        driver.find_element_by_id("idSIButton9").click()
        driver.find_element_by_id("h_inboxCount").click()
        driver.find_element_by_id("NewMessage").click()
        driver.find_element_by_id("AutoCompleteTo$InputBox").clear()
        driver.find_element_by_id("AutoCompleteTo$InputBox").send_keys("address@hotmail.com")
        driver.find_element_by_id("fSubject").clear()
        driver.find_element_by_id("fSubject").send_keys("testsubject")
        driver.find_element_by_css_selector("body..RichText").clear()
        driver.find_element_by_css_selector("body..RichText").send_keys("gggggggggggg")
        driver.find_element_by_id("SendMessage").click()
        driver.find_element_by_id("c_signout").click()

    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e:
            return False
        return True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()
4

5 回答 5

1

微软很有可能阻止了试图访问 Hotmail 或 live.com 页面的自动化服务(如 Selenium)。根据 Microsoft 的服务条款 (TOS),您可以使用自动化服务登录等。这是 TOS (Point Number#2) 所说的:

您不得使用该服务伤害他人或该服务。例如,您不得使用该服务来伤害、威胁或骚扰他人、组织或 Microsoft。您不得: 损坏、禁用、负担过重或损害服务(或连接到服务的任何网络);转售或重新分发服务或其任何部分;使用任何未经授权的方式修改、重新路由或访问服务或尝试执行这些活动;或使用任何自动化流程或服务(例如机器人、蜘蛛、Microsoft 存储的信息的定期缓存或元搜索)来访问或使用该服务。

全文可在此处获得:http: //windows.microsoft.com/en-US/windows-live/microsoft-service-agreement

曾经用 Twitter UI 测试过一些东西,我自己也有过类似的经历。也许您可以寻找可以帮助您通过 SMTP 或 POP3 等登录的第三方服务来测量网络流量,而不是使用前端 UI。

于 2012-05-22T18:15:55.830 回答
0

我怀疑这与cookie有关。也许您从浏览器中删除了 cookie?

于 2012-04-28T17:39:09.037 回答
0

尝试调试脚本直到输入密码或直到

driver.find_element_by_id("idSIButton9").click()

看看它是否工作正常。也许 MS 更改了他们的 UI,因此从那时起调试您的应用程序以查看您是否必须修改脚本以更新对象 ID 会很好。

问候。

于 2012-11-25T23:23:54.717 回答
0
    System.setProperty("webdriver.chrome.driver",
            "F:\\batch230\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    //open hotmail site
    driver.get("http://www.hotmail.com/");
    Thread.sleep(5000);
    driver.manage().window().maximize();
    Thread.sleep(5000);
    //do login
    driver.switchTo().activeElement().sendKeys("mail id");
    driver.findElement(By.id("idSIButton9")).click();
    Thread.sleep(5000);
    driver.switchTo().activeElement().sendKeys("password");
    driver.findElement(By.id("idSIButton9")).click();
    Thread.sleep(5000);
    //compose mail
    driver.findElement(By.xpath("//*[contains(@title,'new message')]")).click();
    Thread.sleep(5000);
    driver.findElement(By.xpath("(//*[@role='textbox'])[1]"))
    .sendKeys("er.anil900@gmail.com",Keys.TAB,"selenium"
            ,Keys.TAB,"Hi",Keys.ENTER,"How are you");
    Thread.sleep(5000);
    //send mail
    driver.findElement(By.xpath("(//*[@title='Send'])[1]")).click();        
    Thread.sleep(10000);
    //do logout
    WebElement e = driver.findElement(By.xpath("(//*[@role='menuitem'])[11]"));
    Actions a = new Actions(driver);
    a.click(e).build().perform();
    Thread.sleep(5000);
    WebElement e1 = driver.findElement(By.xpath("//*[text()='Sign out']"));
    a.click(e1).build().perform();
    Thread.sleep(10000);
    driver.close();
于 2017-01-29T14:33:54.407 回答
0

尝试使用 Xpath 而不是 id。在 xpath 中,您可以使用 following-sibling。它会起作用。

于 2016-10-20T05:46:17.967 回答