我有HTML代码:
<div class="formCaptionContainer fill-width" data-dyn-bind="sizing: { width: $dyn.layout.Size.available }">
<h1 class="formCaption" data-dyn-bind="text: $data.Caption, click: $data.GoGridView">Expense report for Aditi Mehta - GS1-000282, testing2</h1>
<h2 class="formCaption-context" data-dyn-bind="text: $data.ParentTitleFields">Aditi Mehta : GS1-000282</h2>
</div>
我想获得Aditi Mehta的价值费用报告 - GS1-000282,来自/ h1标签的testing2
任何人都知道怎么做?
我试过了:
By.xpath(".//div[@class='formCaption']/h1";
上面显示没有找到元素
By.className("formCaption");
以上显示空白数据
By.xpath(".//*[@class='formCaption']/h1");
上面显示没有找到元素
答案 0 :(得分:0)
您需要考虑locator strategy,以下内容为一般案例方法提供了良好的偏好。
您还应该查看PageObject pattern。
看来该页面正在使用JS库通过后期绑定/解析来显示内容。您的测试需要允许这样做,并等到您感兴趣的页面元素完全呈现。在开发人员解决之前及之后,从开发人员那里了解该元素的外观。延迟解决是确定定位策略的一个考虑因素。该策略应该包括流畅的等待和默认超时元素出现。
这不是修复单个定位器的问题。
答案 1 :(得分:0)
你能试试下面的X路吗?
String msg=driver.findElement(By.xpath("//div[@class='formCaptionContainer fill-width']/h1[@class='formCaption-context']")).getText();
答案 2 :(得分:0)
这段代码对我很有用
String textprint=driver.findElement(By.xpath("//h2[@class='formCaption-context']")).getText();
System.out.println(textprint);
希望它能解决你的问题
答案 3 :(得分:0)
试试这个
String msg= driver.findElement(By.xpath(//div[contains(@class='formCaptionContainer')]/h1 ).getText();
答案 4 :(得分:0)
根据您共享的HTML
,节点属性看起来很动态。所以我们必须按如下方式诱导WebDriverWait
:
new WebDriverWait(driver, 10).until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//h1[@class='formCaption']"), "Aditi Mehta - GS1-"));
System.out.println(driver.findElement(By.xpath("//h1[@class='formCaption']")).getAttribute("innerHTML"));
答案 5 :(得分:0)
这对我有用:
String titleElem = driver.findElement(By.xpath("//*[@class='formCaptionContainer fill-width']/h1")).getAttribute("innerHTML");
assertEquals("Worked", titleElem);
答案 6 :(得分:-1)
您需要什么,网页上显示的数据或HTML代码中使用的textValue?
如果您的定位器是正确的,那么您可以尝试getText()
而不是getAttibute("innerHTML")
,而不是By.xpath("//*[@class='formCaption'][contains(text(),'Aditi Mehta')]").getAttribute("innerHTML");
,
POST https://somedomain.eu.auth0.com/dbconnections/signup