gpt4 book ai didi

javascript - 元素不可见错误(无法单击元素)

转载 作者:IT王子 更新时间:2023-10-29 03:10:06 24 4
gpt4 key购买 nike

我想点击一个单选按钮,出现在网页上。代码如下:

HTML代码:

<div class="small-checkbox red-theme raleway-regular text-muted2 position-relative">

<div class="city-checkbox inline-block position-relative" ng-class="{'rounded-checkbox': main.current_city_id == 1, 'mb-20': main.ifDeviceIsPhone}">
<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect mh-20" for="mumbaiCity" ng-class="{'is-checked' : main.current_city_id == 1}">
<input type="radio" id="mumbaiCity" class="mdl-radio__button position-relative vertical-middle" name="city" value="1" ng-click="main.setCity('Mumbai', 1)">
<span class="mdl-radio__label position-relative font15"><img class="city-icon" src="../../../assets/img/cities/mumbai-icon.png">Mumbai</span>
</label>
</div>
</div>

测试用例:

// demo-test.js
describe('Protractor Demo App', function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000000;

it('check item count', function() {
browser.get('<link>');
element(by.id('mumbaiCity')).click();
});

});

这个测试通过错误:

1) Protractor Demo App check item count

Message:

Failed: element not visible

我也尝试过:

element(by.css('[ng-click="main.setCity('Mumbai', 1)"]')).click();

它给出了错误:

[16:16:26] E/launcher - Error: SyntaxError: missing ) after argument list

请建议单选按钮如何获得点击?

最佳答案

这是使用 selenium 进行自动化测试的一个相当普遍的问题。

以下是常见的解决方案:

  • 确保您要点击的元素确实可见。有时您需要在页面上执行额外的操作以使元素可见。例如,打开下拉菜单以显示一个选项或打开菜单以显示子菜单
  • wait 为元素的visibility:

    var EC = protractor.ExpectedConditions;
    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.wait(EC.visibilityOf(mumbaiCity), 5000);
    mumbaiCity.click();
  • 有一个 另一个元素 具有相同的 id 实际上是不可见的。在这种情况下,您需要改进定位器以匹配此特定元素。例如:

    element(by.css(".city-checkbox #mumbaiCity")).click();
    element(by.css(".city-checkbox input[ng-click*=Mumbai]")).click();
  • 或者,如果您有多个元素匹配同一个定位器 - 您可以 "filter" 输出一个可见元素:

    var mumbaiCity = element.all(by.id('mumbaiCity')).filter(function (elm) {
    return elm.isDisplayed().then(function (isDisplayed) {
    return isDisplayed;
    });
    }).first();
    mumbaiCity.click();
  • 移动到元素然后通过 browser.actions() 点击:

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.actions().mouseMove(mumbaiCity).click().perform();
  • scroll into view 元素然后点击:

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.executeScript("arguments[0].scrollIntoView();", mumbaiCity.getWebElement());
    mumbaiCity.click();
  • 点击通过 javascript(不过要注意 differences):

    var mumbaiCity = element(by.id('mumbaiCity'));
    browser.executeScript("arguments[0].click();", mumbaiCity.getWebElement());
  • 有时,您只需要最大化浏览器窗口:

    browser.driver.manage().window().maximize();

关于javascript - 元素不可见错误(无法单击元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37809915/

24 4 0
文章推荐: javascript - 在不同的 attr 中定义的指令 attr 内的回调函数
文章推荐: javascript - Jasmine 测试检查 html 是否包含文本并返回 bool 值
文章推荐: javascript - 如何在 Javascript 中动态设置在 Chrome 中显示的函数/对象名称
文章推荐: javascript - 如何从 JavaScript 更改