无法在Hotmail, Selenium WebDriver中输入文本到邮件正文,使用Python绑定



我有一个正在工作的测试脚本,它在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()

很有可能微软正在阻止试图访问Hotmail或live.com页面的自动服务(如Selenium)。根据微软的服务条款(TOS),您可以使用自动服务登录等。以下是TOS(第2点)所说的:

您不得使用本服务危害他人或本服务。例如,您不得使用该服务来伤害、威胁或骚扰他人、组织或微软。您不得:损坏、禁用、超载或损害本服务(或连接本服务的任何网络);转售或重新分销服务或其任何部分;使用任何未经授权的手段修改、重新路由或访问服务或试图进行这些活动;或使用任何自动化过程或服务(例如bot, spider, Microsoft存储的定期信息缓存或元搜索)访问或使用服务。

全文可在此下载:http://windows.microsoft.com/en-US/windows-live/microsoft-service-agreement.

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

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

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

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

查看它是否正常工作。也许微软改变了他们的用户界面,所以从那一点开始调试你的应用程序,看看你是否需要修改你的脚本来更新对象id。

问候。

尝试使用Xpath而不是id。在xpath中可以使用following-sibling。

    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();

相关内容

  • 没有找到相关文章

最新更新