繁体   English   中英

使用Javascript和Selenium Webdriver(Chrome)登录

[英]Logging in using Javascript and Selenium Webdriver (Chrome)

我正在尝试编写脚本来访问Cisco无线LAN控制器。 我正在使用Selenium和Chrome,并且停留在登录页面上。 据我所知,单击Cisco初始屏幕上的“登录”按钮会触发一个名为loginAction()的JavaScript,以提示用户输入用户名和密码。

我遇到的问题是弹出式登录框没有可识别的元素。 显示登录框时,光标已在用户名字段中处于活动状态。 看来我可以使用sendKeys函数在当前活动的文本框中输入用户名,但这是行不通的。 由于我不知道文本框的ID,因此无法使用driver.findElement(By.id(“ authlogin”))。sendKeys(“ username”);之类的东西。

在其他论坛帖子中,我看到了常见的解决方案是在加载浏览器时在URL中嵌入用户名和密码,例如driver.get(' https:// username:password@exampleurl.com ')。 我也没有运气。 它只是弹出相同的启动屏幕并要求提供凭据,就像我是否手动单击了启动屏幕上的“登录”按钮一样。

有人对此有任何想法吗? 由于光标已经在用户名文本框中处于活动状态,因此这似乎非常简单。 感谢您的帮助和建议!

屏幕截图

登录该应用程序时,我也面临类似的问题。 由于打开的用于登录的Windows身份验证弹出窗口不是基于浏览器的弹出窗口,因此Selenium无法与其直接交互。 要与基于Windows的弹出窗口进行交互,您必须使用第三方工具(如AutoIT)。 在为AutoIT进行设置后,您只需在网址之后添加一行代码,如下所示

driver.get("http://your.url");
Runtime.getRuntime().exec("D:\\AutoIt\\AutoItTest.exe");//path where you kept exe file 

有关在AutoIt的工作如何更多信息,请第二种方法在这里或经过文章

您也可以直接将用户名和密码插入Url。

示例: http:// username:password@yourUrl.com

因此,您可以在代码中说(在C#中)

string yourUrl = "http://"+username+":"+password+"@yourUrl.com";
driver.Url = yourUrl;

还是java

String yourUrl = "http://"+username+":"+password+"@yourUrl.com";
driver.get(yourUrl);

我最终使用了AutoIT并为其编写了一个简单的脚本来处理登录窗口。 这就是我使用的:

Send("{TAB}{ENTER}")
Sleep(2000)
Send("user{TAB}password{ENTER}")

我使用以下Javascript函数在Selenium中调用了AutoIT脚本:

function autoIT() {
    var child_process = require('child_process');
    var workerProcess = child_process.execFile("C:\\Selenium\\autoitscript.exe");
    sleep(4500).then(() => {
siteNavigate();
});

运行AutoIT脚本后,您可以返回使用Selenium。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM