【问题标题】:Java, relative xpath to find web elementsJava,用于查找 Web 元素的相对 xpath
【发布时间】:2015-11-04 15:58:22
【问题描述】:

我正在尝试遍历一个表 (id="campaignAllAvailableList") 并遍历一个标题列表: (xpath = .//*[@id='campaignAllAvailableList']/li/div/div/h3) 看看它是否与我想要的匹配。

如果是,那么我点击相应的按钮:

(xpath = .//*[@id='campaignAllAvailableList']/li/div/div[3]/a)

<div id="campaignListWrapper" class="campaignOverviewSectionBody campaignListing" style="">
<ul id="campaignAllAvailableList" class="campaignList" style="display: block;">
<li>
<div class="timetableCard clearedGroup">
<div class="timetableCardHeader helpAnchor">
<h3 class="timetableCardTitle">November Campaign metaTitle</h3>
<img class="helpIcon" src="/images/icons/info-icon.png"/>
<div class="popUp helpPopUp">
</div>
<div class="timetableCardBody">
<div class="timetableCardActionBar clearedGroup">
</div>
</li>
<li>
<div class="timetableCard clearedGroup">
<div class="timetableCardHeader helpAnchor">
<h3 class="timetableCardTitle">qwe</h3>
<img class="helpIcon" src="/images/icons/info-icon.png"/>
<div class="popUp helpPopUp">
</div>
<div class="timetableCardBody">
<div class="timetableCardActionBar clearedGroup">
</div>
</li>

这是我现在的java代码:

public class PromotionsPage extends MainPageTemplate
{
    @FindBy(xpath=".//*[@id='campaignAllAvailableList']/li/div")
    List<WebElement> campaignTable;

public PromotionsPage(WebDriver d) throws PageValidationException
{
    super(d);
}

public void clickSpecificGetStartedButton(String metadataTitle)
{

    for (WebElement el : campaignTable)
    {
        WebElement metadataTitleTextElement = el.findElement(By.xpath(".//div/h3"));
        if (metadataTitle == metadataTitleTextElement.getText())
        {
            WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a"));
                getStartedButton.click();
            }
        }
    }
}

它在“for (WebElement el:campaignTable)”处失败,我认为它没有正确地将campaignTable 读取为列表......

我尝试直接查找标题列表

@FindBy(xpath=".//*[@id='campaignAllAvailableList']/li/div/div/h3")
List<WebElement> campaignTable;

然后做

for (WebElement el : campaignTable)
        {
            System.out.println(el.getText());
}

但这也给出了一个错误, java.lang.IllegalArgumentException: 对象不是声明类的实例

【问题讨论】:

  • 到底是什么问题?有什么错误吗?
  • 我刚刚在帖子中包含了错误 - 它在“for (WebElement el:campaignTable)”处失败,我认为它没有正确地将campaignTable 读取为列表
  • 请在问题中发布相关的 HTML,而不是使用图片。该图像最终将无法访问,然后这个问题将不太有用。

标签: java html selenium xpath


【解决方案1】:

单击元素后插入break; 以退出循环。见下文:

public void clickSpecificGetStartedButton(String metadataTitle)
{
for (WebElement el : campaignTable)
{
    WebElement metadataTitleTextElement = el.findElement(By.xpath(".//div/h3"));
    if (metadataTitle == metadataTitleTextElement.getText())
    {
        WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a"));
            getStartedButton.click();
            break;
        }
    }
}
}

【讨论】:

  • 它在'for (WebElement el :campaignTable)' 行失败,所以中断并没有真正帮助
【解决方案2】:

我修好了,但我仍然不确定为什么原始代码不起作用

List<WebElement> campaignTable = driver.findElements(By.xpath(".//*[@id='campaignAllAvailableList']/li/div"));  
for (WebElement el : campaignTable)
{
    String metadataTitle = el.findElement(By.xpath(".//div/h3")).getText();

    if (target.compareTo(metadataTitle)==0)
    {
        WebElement getStartedButton = el.findElement(By.xpath(".//div[3]/a"));
        getStartedButton.click();
        break;
    }
}``

【讨论】:

  • 看到FindBy(xpath=".//*[@id='campaignAllAvailableList']/li/div")不工作并且你添加了break
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
相关资源
最近更新 更多