【问题标题】:how do i write if..else statement using xpath我如何使用 xpath 编写 if..else 语句
【发布时间】:2019-11-19 09:00:17
【问题描述】:

如何使用 xpath 编写 if--else 语句。

//div[@class='slick-viewport']/div/div -- 它给了我 5 个以下 div 标签。

<div class="custom-tooltip slick-cell l1 r1" xpath="1">
    <svg width="100%" height="25" version="1.1" id="SVG_b244db8a-9345-4d57-a865-115c447e4b33" data-ispopupdisplayallowed="true" data-measureid="484" data-is-pcp-user="false" data-is-po-user="true" onclick="openEngagementWithEcosystemSummary('SVG_b244db8a-9345-4d57-a865-115c447e4b33')" xmlns="http://www.w3.org/2000/svg">
    <g></g>
    <text x="10" y="17" fill="black" style="font-weight: bolder; font-size: 12px;" id="PopUp_b244db8a-9345-4d57-a865-115c447e4b33"></text>
    </svg>
</div>
<div class="custom-tooltip slick-cell l1 r1" xpath="2">
    <svg width="100%" height="25" version="1.1" id="SVG_2264e127-682c-426f-a9fe-b3963363f9b3" data-ispopupdisplayallowed="true" data-measureid="486" data-is-pcp-user="false" data-is-po-user="true" onclick="openEPSDTCompletionRateSummary('SVG_2264e127-682c-426f-a9fe-b3963363f9b3')" xmlns="http://www.w3.org/2000/svg">
    <g></g>
    <text x="10" y="17" fill="black" style="font-weight: bolder; font-size: 12px;" id="PopUp_f32ad3d5-e795-4752-9df4-814f99d265b7">
    51% </text>
    </svg>
</div>
<div class="custom-tooltip slick-cell l1 r1" xpath="2">
    <svg width="100%" height="25" version="1.1" id="SVG_2264e127-682c-426f-a9fe-b3963363f9b3" data-ispopupdisplayallowed="true" data-measureid="486" data-is-pcp-user="false" data-is-po-user="true" onclick="openEPSDTCompletionRateSummary('SVG_2264e127-682c-426f-a9fe-b3963363f9b3')" xmlns="http://www.w3.org/2000/svg">
    <g></g>
    <text x="10" y="17" fill="black" style="font-weight: bolder; font-size: 12px;" id="PopUp_f32ad3d5-e795-4752-9df4-814f99d265b7">
    31% </text>
    </svg>
</div>
    <div class="custom-tooltip slick-cell l1 r1" xpath="3">
    <svg width="100%" height="25" version="1.1" id="SVG_cd847418-1c52-465a-a473-1e3ae2a0b979" data-ispopupdisplayallowed="false" data-measureid="485" data-is-pcp-user="false" data-is-po-user="true" xmlns="http://www.w3.org/2000/svg">
    <g></g>
    <text x="10" y="17" fill="black" style="font-weight: bolder; font-size: 12px;" id="PopUp_cd847418-1c52-465a-a473-1e3ae2a0b979">
    Available 
    </text>
    </svg>
</div>
    <div class="custom-tooltip slick-cell l1 r1" xpath="4">
    <svg width="100%" height="25" version="1.1" id="SVG_856b33a6-b361-4020-a01c-fbccb9d171de" data-ispopupdisplayallowed="false" data-measureid="500" data-is-pcp-user="false" data-is-po-user="true" xmlns="http://www.w3.org/2000/svg">
    <text x="10" y="17" fill="black" style="font-weight: bolder; font-size: 12px;" id="PopUp_856b33a6-b361-4020-a01c-fbccb9d171de">
    Available 
    </text>
    </svg>
</div>

简而言之,

//div[@class='@class='slick-viewport'']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='true']

--给出3个元素(行)

第二行和第三行包含标签文本,其中包含值/字符串“51%”和 31%,而第一行不包含文本标签的任何值..

//div[@class='@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='false'] ---Giving 2 elements(rows)

我的 for 循环会执行 5 次(totalNoOfDivs.size())

需要帮助写下 if...else 上述 3 个条件的语句,并将成为 for 循环的一部分。

需要的第一个条件----不包含任何文本标签。(@data-ispopupdisplayallowed='true')

第二个条件需要-----包含诸如51%, 31% (@data-ispopupdisplayallowed='true')的文本

需要第三个条件 -- 只是为了获取文本“Available”(@data-ispopupdisplayallowed='false')

简而言之,所有 3 个条件在单击行后都会执行不同的操作,因此需要使用 if...else 语句放入 for。 任何帮助将不胜感激.....

【问题讨论】:

  • 这个字符串是否有助于放置条件。 String xpathpopUp="//div[@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='true']"; String xpathgetText= "//div[@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='false']";
  • 问题太宽泛了。 1) 不包含文本标签的任何文本。(@data-ispopupdisplayallowed='true') 2) 包含 51%、31% 等文本 (@data-ispopupdisplayallowed='true') 和 3) 获取文本“可用”。你能缩小问题的范围吗?
  • 我的所有行都有 3 个 xpath。 Xpath(1) -//div[@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='true'] --这个路径给出我的弹出窗口有 1 列想要在控制台上显示。 Xpath(2) -- //div[@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='true']//*[ name()='text'] 给了我 5 列的弹出窗口。 Xpath(3)- //div[@class='slick-viewport']//div[2]//*[name()='svg' and @data-ispopupdisplayallowed='false']//*[name ()='text'] 没有弹出窗口,只有文本“不可用”。想要将所有 3 条路径与 if else 放在 for 循环中。
  • 我尝试跟踪但仅打印第一个弹出窗口中的 5 个值。for(int i=0; i
  • 再次点击第一行,弹出窗口打开,然后抛出错误“org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attach to the page document”。

标签: selenium


【解决方案1】:

您可以找到所有元素,并使用 for 循环逐个遍历它们:

var elements = driver.FindElements(By.Xpath("//div[@class='slick-viewport']/div/div"));

for (int i = 0; i < elements.Count; i++)
{
     <if then logic here>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2021-12-02
    相关资源
    最近更新 更多