如何在Outlook中选择邮件以断言内容

3 投票
2 回答
4339 浏览
提问于 2025-04-18 02:07

我该如何在Outlook中选择一封邮件以验证其内容。

我现在的任务是测试live.com的邮件网页。Live.com网页

我遇到的问题是,当我点击收到的邮件时,出现了一个错误:

权限被拒绝,无法访问属性'__qosId'

我实在搞不懂哪里出了问题。下面是我提供的代码。

    // Create a new instance of the Firefox driver
    WebDriver driver = new FirefoxDriver();

    // Create a new instance of the Selenium backed webdriver
    Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);

    // And now use this to visit Live.com
    driver.get("https://mail.live.com/");

    // Find the text input element by its name
    WebElement emailField = driver.findElement(By.id("i0116"));
    // Enter your email
    emailField.sendKeys(email);

    // Repeat process for Password field
    WebElement passField = driver.findElement(By.id("i0118"));
    passField.sendKeys(password);

    // Sign In button
    WebElement signInBtn = driver.findElement(By.name("SI"));
    signInBtn.click();

    // Click the compatibility link
    driver.findElement(By.linkText("continue to your inbox")).click();

    // Assert some things
    assertTrue(selenium.isTextPresent("Inbox"));

在这个步骤,我已经尝试了几种不同的选项,但似乎找不到正确的。 我也用Python写了相同的测试,但我不想让大家觉得无聊,所以就不分享类似的代码了。

    // Opens the first email in the row
    driver.findElement(By.partialLinkText("foo foo")).click();

Python的错误信息看起来是这样的:

WebDriverException: 消息: u"权限被拒绝,无法访问属性'__qosId'" ; 堆栈跟踪:

2 个回答

0

你可以使用下面的代码片段来实现你的目的:

代码片段 1:

driver.get("https://mail.live.com/");

driver.findElement(By.name("login")).sendKeys("email@live.com");
driver.findElement(By.name("passwd")).sendKeys("password");
driver.findElement(By.name("SI")).click();      

//insert code to wait for an element available on the landing page

List<WebElement> email = driver.findElements(By.xpath("//span[@class='Sb']"));
email.get(0).click();

代码片段 2:

driver.get("https://mail.live.com/");

driver.findElement(By.name("login")).sendKeys("email@live.com");
driver.findElement(By.name("passwd")).sendKeys("password");
driver.findElement(By.name("SI")).click();      

//insert code to wait for an element available on the landing page

WebElement email = driver.findElements(By.xpath("//span[@class='Sb'][1]"));
email.click();
1

在寻找这个问题的解决办法时,我遇到了同样的问题。我觉得这是Selenium里的一个bug。

为了实现你想做的事情,我尝试了使用JavaScriptExecutor,结果成功了。

WebDriver driver = new FirefoxDriver();
driver.get("https://mail.live.com/");

driver.findElement(By.name("login")).sendKeys("email@live.com");
driver.findElement(By.name("passwd")).sendKeys("password");
driver.findElement(By.name("SI")).click();      

Thread.sleep(2000); // change that as you wish. or use global wait.

((JavascriptExecutor) driver).executeScript("document.getElementsByClassName('t_estc')[0].click();");

我在这里做的就是,使用JavaScript获取所有被类名为“t_estc”标识的邮箱,然后点击那个数组里的第一个元素。

这样就会点击你收件箱里的第一个邮箱。如果你想处理整个列表,就需要加一些逻辑。

撰写回答