【问题标题】:XPath questions for Selenium Webdriver C# to locate search result on webpageSelenium Webdriver C# 的 XPath 问题在网页上定位搜索结果
【发布时间】:2014-07-17 03:07:50
【问题描述】:

我是 Selenium 的新手,正在尝试实施 Webjet (www.webjet.com.au) 以在搜索结果后完成搜索过程和航班预订。但是我在定位搜索结果时遇到了困难,我检查了 firebug 中的链接,但是它被包裹在 div/ 中,让我感到困惑。我也尝试了链接文本,但它不起作用。

编辑:我试图定位的元素是航班票价(例如:97 美元),Firebug 的 html 代码如下所示:

<div class="span1 matrix-price multifare">
<div>
<span class=" without-baggage baggage fare-select OneWay Morning oneway" data-price="97" data-flight-group-no="216" data-flight-halfreturn-token="" data-fare-id="1000072" data-baggage-id="JQ.BGNO" data-original-title="">$97</span>

这个元素的 XPath 是 .//[@id='flight-matrixes-wrapper']/div[1]/div/div[2]/div[1]/div[10]/div[3]/div[1]/span 根据航班搜索条件会产生不同的结果,我从前面的例子中查找并尝试使用 driver.FindElement(By.XPath("//[contains(text(),'$')]/descendant::*)")).Click(); 但不太确定。

【问题讨论】:

  • 你能发布你的代码吗?不看 HTML 就很难知道发生了什么,而且我也无法轻易弄清楚您实际上要在哪个页面上执行操作。
  • 这个/div[1]/div/div[2]/div[1]/div)"看起来有点搞笑
  • @Noctis,这是我从 Firepath 获得的 XPath。

标签: c# selenium webdriver automated-tests


【解决方案1】:

我尝试在给定的网站上进行搜索,基于此,我认为遵循 xpath 可能会有所帮助

//div[contains(@class,'matrix-price')]//div//span[text()='$328']

如果您知道预期价格(此处为 $328),您可以直接在 xpath 上方使用,或者您可以在下方使用来获取网格上的所有定价显示

//div[contains(@class,'matrix-price')]//div//span[contains(text(),'$')]

无论如何,如果您要点击特定价格,您需要知道要点击的确切价格

附加说明

01) 上面的 xpath 是假设您参考的是类似于附件图像的定价网格!

02) 确保您等待足够长的时间,直到网格被正确填充

03) 我使用 Fire Finder 构建 xpath,fire finder 突出显示与给定 xpath 匹配的元素(如附图所示)

等待的代码片段

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement Elem = wait.Until<IWebElement>((d) =>
{
    return d.FindElement(By.Class("matrix-price"));
});

您可以等待确切的 Pricing 元素而不是 above 。如果 10 秒不够,你可以增加时间跨度(在上面的代码中)

【讨论】:

  • 非常感谢Dasun,结果元素现在可以正确突出显示了。当我尝试使用 'driver.FindElement(By.XPath("//div[contains(@class,'matrix-price')]//div//span[text()=' $99']")).Click()'; [/code] 有一条警告消息说 element not visible or may not be interact with ,不过我已经设置了 10 秒的等待时间。有任何想法吗? @DasunB
  • 我认为您可以在这里实现“等待元素”代码。我将使用代码 sn-p 更新答案请参阅 - docs.seleniumhq.org/docs/04_webdriver_advanced.jsp 了解更多信息 - 这是我使用代码 sn-p 的地方如果我的答案解决了您的问题,请将其标记为正确答案谢谢
【解决方案2】:

如果你想在这里陈词滥调:

试试:

 driver.FindElement(By.XPath(".//*[@class='span1 matrix-price multifare']")).Click();

如果你想在这里陈词滥调: 97 美元

试试:

 driver.FindElement(By.XPath(".//*[@class=' without-baggage baggage fare-select OneWay Morning oneway']")).Click();

我只知道这个,因为我是新手

【讨论】:

  • 非常感谢@Lion6,我尝试了完全相同的代码,但它不会定位在链接元素上
  • 非常抱歉,现在为下一个愚蠢的问题感到抱歉:从这里到底是哪个按钮:webjet.com.au 带有文本“搜索航班”的绿色按钮?
  • holly molly ... 为什么不直接编辑答案而不是创建多个答案?
  • 哦,我没有想到,这是我第一次在这里回答,谢谢。啊,你有什么想法解决Billyuatbcs正在寻找的代码问题吗?
  • :D 谢谢你帮助我,“搜索航班”可以通过 By.Id("flight-search-button") @Lion6 找到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多