【问题标题】:Protractor Automation: Selection of element量角器自动化:元素的选择
【发布时间】:2018-04-21 02:11:36
【问题描述】:

我正在尝试自动选择一些产品...Here's a screenshot

用户点击“基础”颜色的顶行,然后从下方生成的托盘中选择所需的颜色。

我可以毫无问题地选择基色。

element(by.xpath('html/body/main-app/kf-sidebar-app/div[1]/app-container/div/dashboard/div/div/visualise/open-interface/div/div/div[2]/div[2]/digitalbridge-category-list/div/digitalbridge-category-view[2]/div/div[1]/div/div[2]')).click();

...选择所需的颜色更令人抓狂!!!我得到的最接近的结果是“元素不可见”消息....尝试添加“等待”但没有区别。

这段代码..

var EC = protractor.ExpectedConditions;
 var paintSelected = element(by.xpath('.//div[@id="2386"]'));
 browser.wait(EC.visibilityOf(paintSelected), 7000);
 paintSelected.click();

..产生一行又一行的..

[11:27:22] W/element - more than one element found for locator By(xpath, .//div[@id="2386"]) - the first result will be used

这会一直运行,直到达到 7000 毫秒超时。我试过使用“第一”,但它没有被“识别”……也试过 [0],但又一次,没有被识别。

这是来自控制台的行...

<div _ngcontent-c63="" class="item circle" id="2386" style="background-image: url(&quot;https://shortbite.s3-eu-west-1.amazonaws.com:443/category/raw/941027c0-f6e6-434c-9ab9-66f9918c33e6.png?Signature=Zbffcvf73Nv9g2v9G3SmcYn6h24%3D&amp;Expires=1510141234&amp;AWSAccessKeyId=AKIAIUUATNKB37DELIXQ&quot;);"> </div>

请试着拯救我的理智!谢谢 大卫

【问题讨论】:

    标签: selenium protractor


    【解决方案1】:

    尝试将您的选择器放入控制台,即 $x(".//div[@id='2386']")。 只是看看你是否真的有两个具有相同 Id 的元素

    还可以查找元素并调试元素集合。

    我对扩展框架所做的一件事是实现了高亮元素功能。

    IJavaScriptExecutor js = Driver as IJavaScriptExecutor;
    js.ExecuteScript("arguments[0].setAttribute(arguments[1], arguments[2])", ReferenceElement, "style",
                "border: 2px solid red; border-style: dashed;");
    

    【讨论】:

    • 好一个!只有一个 id2386!
    • 点击事件有效吗?并尝试 browser.wait(EC.elementToBeClickable(paintSelected), 7000)
    • 手动运行时点击事件有效。尝试了“ToBeClickable”更改,但只是收到滚动“多个元素”消息,直到超时。
    • 一件事..可能不相关:用户可以单击颜色,然后单击要应用颜色或拖放的图像。鼠标指针在颜色上方变为“手”,但单击仍会选择。
    【解决方案2】:

    如果您有 id,您可以像这样在 chrome 或 firefox 控制台中检查具有该 id 的所有可用元素:

    $$('#2386')
    

    $$ 将返回所有,一个 $ 将返回第一个。

    因为如果您有超过 1 个具有相同定位器的元素,量角器将获得第一个。

    如果没有办法给你元素不同的定位器,你可以通过索引来获取它。

    例如,在您的代码中,首先查找所有元素并将其分配给变量:

    var allColors = $$('#2386'); // same as element.all(by.id('2386'))
    

    或通过索引获取它们

    var firstColor = $$('#2386').get(0); // or $$('#2386').first();
    var secondColor = $$('#2386').get(1); // or $$('#2386').first();
    

    【讨论】:

      【解决方案3】:

      使用 firepath 并找出绝对的 xpath 。 然后添加一些等待并尝试使用绝对 xpath 来单击元素

      【讨论】:

      • 我知道这不是推荐的方法。但是您可以尝试检查它是否有效。如果它不起作用,请告诉我
      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 2016-03-04
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2015-03-10
      • 2019-11-25
      • 2018-01-11
      相关资源
      最近更新 更多