我正在使用Selenium WebDriver。我面临动态更改ID的问题。我已经阅读了Handle elements that have changing ids all the time through Selenium Webdriver之类的帖子,但没有找到可以帮助我的解决方案。
在XPath中包含start-with
和contains
无法提供帮助,因为有很多元素以类似的文本和id不断变化开头。请参阅下面的HTML
以获得更清晰的信息。
<mat-option _ngcontent-c1="" class="__mat-option mat-option ng-star-inserted"
role="option" tabindex="0" id="mat-option-4"
aria-selected="false" aria-disabled="false">
<span class="mat-option-text">
<i _ngcontent-c1="" class="material-icons">description</i>
<span _ngcontent-c1="" style="padding-left: 8px">Campaign Details</span>
</span>
<div class="mat-option-ripple mat-ripple" mat-ripple=""></div>
</mat-option>
mat-option-
开头。<span>
中的文字。我尝试了driver.findElement(By.xpath(".//span[contains(text(), 'Campaign Details']"));
,但没有为我工作。
答案 0 :(得分:3)
根据您提供的用于将文字标识为广告系列详细信息的HTML,因为该元素是 Angular 元素,您必须诱导 WebDriverWait 使元素可见如下:
WebElement myElement = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//mat-option[@class='__mat-option mat-option ng-star-inserted' and @role='option'][starts-with(@id,'mat-option-')]/span[@class='mat-option-text']//span[contains(.,'Campaign Details')]")));
答案 1 :(得分:0)
唯一唯一的是<span>
中的文字,因此文字为:广告系列详细信息
WebElement campaignDeatils = driver.findElement(By.xpath("//i[text()='description']/following-sibling::span[text()='Campaign Details']"))
campaignDeatils.getText(); // or any other operation you wanna do.
答案 2 :(得分:0)
WebElement campaignDeatils = driver.findElement(By.xpath(""//i[@class='fa fa-bullhorn']/following-sibling::span[text()='Campaigns']"))
campaignDeatils.getText();