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