GVKun编程网logo

将带有html / Javascript的字符串放入Selenium Webdriver中(在html中引入javascript)

16

针对将带有html/Javascript的字符串放入SeleniumWebdriver中和在html中引入javascript这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Javascri

针对将带有html / Javascript的字符串放入Selenium Webdriver中在html中引入javascript这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Javascript Selenium Chrome WebDriver - 处理警报的正确方法、javascript – Selenium WebDriver点击隐藏元素、javascript – 如何使用selenium-webdriver包与SauceLabs?、javascript – 如何使用WebDriverJS捕获Selenium错误等相关知识,希望可以帮助到你。

本文目录一览:

将带有html / Javascript的字符串放入Selenium Webdriver中(在html中引入javascript)

将带有html / Javascript的字符串放入Selenium Webdriver中(在html中引入javascript)

我在内存中有一个HTML文档作为字符串。它包含一个<script>带有操纵dom的小脚本的标签。现在,我想将该HTML页面加载到Selenium
Webdriver中,并在脚本对其进行操作后返回该页面。由于我已经在内存中存储了html,因此我不太喜欢将html写入文件并使用加载为文件的想法driver.get("file://path/to/file")。所以问题是,是否有可能实现我想要的目标。

如果webdriver无法做到这一点,也许还有其他可能性吗?

这里有一个例子:

<html><head><script type="text/javascript">function fill(){    var i = "secret"    document.forms[0].elements[1].value=i}</script></head><body onload="fill()"><form method="POST"><input type="hidden" name="he1" value=""><input type="hidden" name="he2" value=""></form></body></html>

显然,我希望网络驱动程序执行dom操作并根据脚本更改形式。

请注意, 这仅是示例。我需要运行的实际脚本要做的事情要复杂得多。

答案1

小编典典

如果您不想在无法替换页面内容之前创建文件或加载URL,则始终可以利用支持HTML,CSS和JavaScript
的数据URL功能:

ChromeDriver driver = new ChromeDriver();html_content = """<html>     <head></head>     <body>         <div>             Hello World =)         </div>     </body></html>"""driver.get("data:text/html;charset=utf-8," + html_content)

Javascript Selenium Chrome WebDriver - 处理警报的正确方法

Javascript Selenium Chrome WebDriver - 处理警报的正确方法

如何解决Javascript Selenium Chrome WebDriver - 处理警报的正确方法?

我正在尝试关闭 selenium 脚本运行时有时会出现的警报。它阻止了我在 try catch 选项中处理的特定 div 的单击选项。发生此异常时,''正在尝试使用驱动程序功能,但它生成,NoSuchAlertError"。

这是我代码的一部分:

let driver = await new Builder()
    .withCapabilities(options)
    .forbrowser("chrome")
    .build(); 

// .. some other logic like get website etc. ... //

    try {
        let dataFromButton= await getDataFromButton(driver); // it fails when alert appear on screen
    } catch (e) {
        let alert = await driver.switchTo().alert(); // it throws NoSuchAlertError
    }

Here is my alert popup,that I''m trying to remove - click on cancel button or call escape key would be enough solution for me

是否有任何特殊的,alerts” 应该以其他方式处理而不是我的示例?

解决方法

我终于找到了使用此代码的 chrome 解决方案:

await driver.executeScript(''window.stop();'');

javascript – Selenium WebDriver点击隐藏元素

javascript – Selenium WebDriver点击隐藏元素

嗨,我想知道如何使用Selenium WebDriver点击隐藏元素和/或禁用元素.

我知道用硒1我可以这样做如下:

selenium.click(id="idOfHiddenField");

并且这将工作,但是与硒2(WebDriver),这不是.我不想使用jquery来启用或显示隐藏的字段或JavaScript.这是因为大多数测试都在使用xpath.

或者我只需要留下旧的硒,让你点击隐藏的领域?

解决方法

有一个更简单的方法来解决问题使用JavascriptExecutor.

例如:

document.getElementsByClassName('post-tag')[0].click();

上述JavaScript将点击此页面右上方的“Selenium”标签(旁边的问题),即使它被隐藏(假设).

所有你需要做的是通过JavascriptExecutor接口发出这个JS指令,如下所示:

(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");

这将使用JS沙箱和综合点击事件来执行点击操作.虽然它破坏了WebDriver用户活动模拟的目的,但是您可以将其用于您的情况下,在您的情况下很好的效果.

javascript – 如何使用selenium-webdriver包与SauceLabs?

javascript – 如何使用selenium-webdriver包与SauceLabs?

SauceLabs提供了如何使用WD节点包编写远程测试的示例.我更喜欢selenium-webdriver包.有没有办法远程使用呢?

解决方法

从selenium-webdriver文档中获取示例代码,我们可以按照以下步骤进行修改,以与Sauce Labs的硒云交谈.它假设你有ENV vars的凭据,当然如果你想要安全的话,你可以对它们进行硬编码.
var webdriver = require('selenium-webdriver');

var sauce = 'http://ondemand.saucelabs.com:80/wd/hub';
var driver = new webdriver.Builder().
    usingServer(sauce).
    withCapabilities({
        browserName: 'Chrome',platform: 'Windows 2012',name: 'Sample selenium-webdriver test',username: process.env.SAUCE_USERNAME,accessKey: process.env.SAUCE_ACCESS_KEY
    }).
    build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
    return driver.getTitle().then(function(title) {
        return title === 'webdriver - Google Search';
    });
},1000);

driver.quit();

javascript – 如何使用WebDriverJS捕获Selenium错误

javascript – 如何使用WebDriverJS捕获Selenium错误

所以我使用的是Selenium的 JavaScript实现,WebDriverJS.与任何Web浏览器自动化一样,最大的障碍是让代码减慢足够长的时间以加载页面元素.我的解决方案是:

对于我想与之交互的每个元素,我都有这样的代码块

xpath = "//div[@id='gs_lc0']/input[@id='gbqfq']"
driver.wait(function(){
    return waitForElement(xPath,driver);
});
try{
    element = driver.findElement(webdriver.By.xpath(xPath));
}catch(e){
    console.log("Wait Function False Positive")
}
element.sendKeys("Let Me Google That For You\n";

用这个函数在wait函数中重复

var waitForElement = function(path,driver){
    console.log("try: " + path)
    try{
        driver.findElement(webdriver.By.xpath(path));
    }catch (e){
        console.log("FAILURE")
        return false;
    }
    console.log("SUCCESS")
    return true;
}

现在这个代码有时会起作用,但是它不会起作用.我觉得等待功能完全不起作用,我只是获得了幸运的网页加载时间.因此,为了测试这个理论,我将try函数添加到代码块中,甚至无法捕获“NoSuchElementError”.所以我的问题首当其冲的是,是否有其他方法来形成tryCatch函数,以便捕获这些错误.

如果想要完整再现,我的代码头部也是如此

var webdriver = require('selenium-webdriver'),element

var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

driver.get('google.com');

解决方法

bagelmaker建议使用findElements并不是坏事.这通常是我想要检查一个元素是否存在而不是混乱异常的情况.

但是,为了完整起见,以下是如何处理元素不存在时生成的错误:

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

driver.get('http://www.google.com');

driver.findElement(webdriver.By.id("fofofo")).then(null,function (err) {
    if (err.name === "NoSuchElementError")
        console.log("Element was missing!");
});

driver.quit();

然后是第二个参数是一个errback,如果findElement失败则调用它.因为selenium-webdriver以promises运行,所以这就是你必须捕获错误的方法.使用try … catch无法正常工作,因为Selenium没有立即开始工作;您要求Selenium对findElement执行的工作将在未来的未确定时间执行.到那时,JavaScript执行将从你的try … catch中移出.

上面的代码搜索id值为fofofo的元素,该元素不存在且失败.

今天关于将带有html / Javascript的字符串放入Selenium Webdriver中在html中引入javascript的分享就到这里,希望大家有所收获,若想了解更多关于Javascript Selenium Chrome WebDriver - 处理警报的正确方法、javascript – Selenium WebDriver点击隐藏元素、javascript – 如何使用selenium-webdriver包与SauceLabs?、javascript – 如何使用WebDriverJS捕获Selenium错误等相关知识,可以在本站进行查询。

本文标签: