【发布时间】:2021-07-08 10:26:22
【问题描述】:
下面的测试失败,说xpath 表达式不正确。我是按照网上教程做的。
// open browser
IWebDriver webDriver = new FirefoxDriver();
// navigate to site
webDriver.Navigate().GoToUrl("https://localhost:44311/");
// identify details button
IWebElement detailsLink = webDriver.FindElement(By.XPath("//*[contains(., 'Details')]"));
// operation
detailsLink.Click();
var detailsLabel = webDriver.FindElement(By.XPath("//div[text() = 'Change in $'"));
// assertion
Assert.That(detailsLabel.Displayed);
我想创建简单的 Selenium 测试。
- 我正在按特定按钮打开新页面
- 检查特定对象是否在该页面上正确加载
按钮是<a></a>,里面有Details。实际上有重复,唯一独特的是href。这可能是第一个问题,但我不知道如何“抓住”它。detailsLabel 实际上是 <div>Change in $</div> 和 class,我认为这与测试无关。
所以,我的问题是,如何正确编写这个测试?测试本身应该或多或少没问题,但detailsLink 和detailsLabel 有一定的问题。
编辑
IWebElement detailsLink = webDriver.FindElement(By.CssSelector("[href*='Details?cryptocurrency=BTC']"));
//operation
detailsLink.Click();
var detailsLabel = webDriver.FindElement(By.XPath("//div[contains(text(),'Change in $')]"));
为detailsLink返回异常Selenium.StaleElementReferenceException
编辑
IWebElement detailsLink = webDriver.FindElement(By.CssSelector("[href*='Details?cryptocurrency=BTC']"));
detailsLink.Click();
var detailsLabel = webDriver.FindElement(By.XPath("//*[text()='Change in $```
Test fails at `detailsLabel`, fails to find our target `div`.
【问题讨论】:
-
一旦点击
detailsLink,它是导航到新的网址还是打开一个新的浏览器窗口? -
@KunduK 成功打开网络浏览器,移动到
detailsLink,但找不到div。 -
@您是否提供了足够的等待来识别元素?
-
@KunduK 刚刚发现不需要询问,因为 Firefox 允许将 XPath 复制到任何元素。问题解决了。