【问题标题】:Robot Framework - Can't click on div / span - React generated web page机器人框架 - 无法点击 div / span - React 生成的网页
【发布时间】:2016-09-09 22:35:12
【问题描述】:

我已经反应生成了具有这种结构的网页:

div
 ...
   div
   div
     div class=x_1
       <span randomtag=y> text1 </span>
     div class=x
       <span randomtag=z> text2 </span>
     div class=x
       <span randomtag=q> text3 </span>
   div
   div
   div
 ...
div

我正在尝试单击 randomtag=z。我试过了:

xpath:

  • 我可以找到 randomtag y 的 div,只需使用 .../div[2]/div[1] 将结构折腾到 div(没有其他标识符)
  • 我无法使用 xpath 获取第二个 div(.../div[2]/div[1] 有效,但 .../div[2]/div[2] 无效)

css:

以下也不起作用

css=div > span[randomtag="z"]
css=div.x span[randomtag="z"]

我对这里选择正确元素的可能性有点迷茫。

机器人代码只是基本的 等到元素可见 |定位器(不管它是什么) 例如。

wait until element is visible     css=div.x span[randomtag="z"]
wait until element is visible     xpath=<previous path here>/div[2]/div[2]

有什么想法吗?这是反应的原因吗?

我得到“元素在 x 秒内不可见”。对于超时,我尝试了 5-30 秒。

编辑:

我还尝试使用搜索工具(在浏览器上的开发工具后面)找到 xpath,当我将 xpath 或 css 定位器插入搜索时,它会找到元素。

【问题讨论】:

  • 你想在这里实现什么?您是否要使用元素 z 来识别 div of randomtag = 'y'
  • 我试图让 Robot 找到 div(randomtag=z 的父级)或 span 本身(randomtag=z)。最终目标是让机器人定位元素,以便能够使用“单击元素”命令单击它。
  • //span[@randomtag='z']/.. 它会给你randomtag = z的父div
  • 是的。这可以在网页上找到元素,但机器人无法识别它。我仍然收到“元素在 x 秒内不可见”错误。如果我把它放在网页上的开发者工具搜索中(在 f12 后面),它可以找到,但我无法让机器人找到它。

标签: reactjs xpath selenium-webdriver css-selectors robotframework


【解决方案1】:
public static void waitUntilElementIsVisible(WebElement element, WebDriver driver) 
{        
    FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver);
    wait.pollingEvery(250,  TimeUnit.MILLISECONDS);
    wait.withTimeout(2, TimeUnit.MINUTES);
    wait.ignoring(ElementNotVisibleException.class); //make sure that this exception is ignored
    Function<WebDriver, WebElement> function = new Function<WebDriver, WebElement>()
            {
                public WebElement apply(WebDriver driver) {
                    System.out.println("Checking for the element!!");                       
                    if(element.isDisplayed() != true)
                    {
                        System.out.println("Target element is not visible");
                    }
                    return element;
                }
            };

    wait.until(function);
}

然后调用它:

WebDriver el = driver.FindElement(By.css("yourcss"));
waitUntilElementIsVisible(el, driver);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2017-03-30
    • 2021-12-21
    • 2018-04-22
    • 2018-04-12
    • 2019-02-18
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多