【问题标题】:How to click on the element with text as Ok using Selenium and Java如何使用 Selenium 和 Java 单击文本为 Ok 的元素
【发布时间】:2020-05-02 02:27:45
【问题描述】:
<div id="RadWindowWrapper_alert1579252675818" class="RadWindow RadWindow_Metro rwNormalWindow rwTransparentWindow" unselectable="on" style="width: 398px; height: 148px; position: absolute; transform: none; backface-visibility: visible; touch-action: none; visibility: visible; left: 84px; top: 113px; z-index: 3012;"><table cellspacing="0" cellpadding="0" class="rwTable" style="height: 148px;"><tbody><tr class="rwTitleRow"><td class="rwCorner rwTopLeft">&nbsp;</td><td class="rwTitlebar" style="cursor: move;"><div class="rwTopResize"><!-- / --></div><table align="left" cellspacing="0" cellpadding="0" class="rwTitlebarControls"><tbody><tr><td style="width: 16px;"><a class="rwIcon"></a></td><td><em unselectable="on" style="width: 318px;">Automax Message</em></td><td nowrap="" style="white-space: nowrap;"><ul class="rwControlButtons" style="width: 32px;"><li><a href="javascript:void(0);" class="rwCloseButton" title="Close"><span>Close</span></a></li></ul></td></tr></tbody></table></td><td class="rwCorner rwTopRight">&nbsp;</td></tr><tr class="rwContentRow"><td class="rwCorner rwBodyLeft">&nbsp;</td><td class="rwWindowContent" valign="top"><iframe name="alert1579252675818" src="javascript:'<html></html>';" frameborder="0" style="width: 100%; height: 100%; border: 0px; display: none;"></iframe><div id="alert1579252675818_content" style="">
    <div class="rwDialogPopup radalert" style="background-image: url(&quot;../Images/InteractionImages/AutomaxSuccess.png&quot;);">         
        <div class="rwDialogText" id="alert1579252675818_message">
        Location added successfully<br><br>             
        </div>

        <div>
            <a onclick="$find('alert1579252675818').close(true);" class="rwPopupButton" href="javascript:void(0);" tabindex="-1">
                <span class="rwOuterSpan">
                    <span class="rwInnerSpan">Ok</span>
                </span>
            </a>                
        </div>
    </div>
    </div></td><td class="rwCorner rwBodyRight">&nbsp;</td></tr><tr class="rwStatusbarRow" style="display: none;"><td class="rwCorner rwBodyLeft">&nbsp;</td><td class="rwStatusbar"><table align="left" cellspacing="0" cellpadding="0" style="width: 100%;"><tbody><tr><td style="width: 100%;"><input id="alert1579252675818_status" readonly="" unselectable="on" tabindex="-1"><label for="alert1579252675818_status" style="display: none;">status label</label></td></tr></tbody></table></td><td class="rwCorner rwBodyRight">&nbsp;</td></tr><tr class="rwFooterRow"><td class="rwCorner rwFooterLeft">&nbsp;</td><td class="rwFooterCenter">&nbsp;</td><td class="rwCorner rwFooterRight">&nbsp;</td></tr></tbody></table></div>
  1. “确定”按钮消息的详细 HTML 标记。
  2. name="alert1579246138835" 在刷新页面时发生变化。
  3. 用于弹出/警报的 HTML 在页面上存在/可见

【问题讨论】:

  • 不要查看整个driver,寻找以rwDialogText 为父元素的span 元素
  • 您是否尝试过直接引用“确定”按钮?检查 Chrome 上的元素,复制 xPath?
  • @DeaneKane 也试过了
  • 你可以试试 xpath "//span[.='Ok']"
  • @Jayaram Ganeshan 请不要忘记标记解决您问题的答案。见:stackoverflow.com/help/someone-answers

标签: java selenium xpath css-selectors webdriverwait


【解决方案1】:

所需的元素是动态元素,因此要在元素上定位和click(),您必须为elementToBeClickable() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.rwPopupButton > span.rwOuterSpan > span.rwInnerSpan"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='rwPopupButton']/span[@class='rwOuterSpan']/span[@class='rwInnerSpan' and text()='Ok']"))).click();
    

【讨论】:

  • 预期条件失败,上面的“Ok”消息出现在一个框架下,所以我在驱动程序之前和之前尝试了给定的 xpath 和 css 选择器。 switchTo().defaultContent();
  • 如果元素在&lt;iframe&gt; 中,则代码行肯定会失败。 switchTo().defaultContent(); 不是切换到任何帧的理想方式。你能用&lt;iframe&gt;的HTML更新问题吗?
  • 您更新的 HTML 似乎无效。您可以复制网页中的 HTML 而不是手工制作吗?
  • HTML 原样复制
  • 使用更新的 HTML,我在这个答案中提供的定位器仍然是 valid ,因为元素位于 &lt;iframe&gt; 标记之外。一旦 popup / alert 在页面上出现/可见,您是否收集了 HTML?您可以使用答案中的定位器通过 Chrome 开发工具 找到 popup / alert 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 2020-03-08
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多