本文将分享seleniumsendKeys不发送所有字符的详细内容,并且还将对selenium发送请求进行详尽解释,此外,我们还将为大家带来关于c#–我怎样才能让Selenium-WebDriver在
本文将分享seleniumsendKeys不发送所有字符的详细内容,并且还将对selenium 发送请求进行详尽解释,此外,我们还将为大家带来关于c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?、c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?、Java Selenium如何使用sendkeys上传文件、java-selenium sendkeys () 上传文件的相关知识,希望对你有所帮助。
本文目录一览:- seleniumsendKeys不发送所有字符(selenium 发送请求)
- c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?
- c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?
- Java Selenium如何使用sendkeys上传文件
- java-selenium sendkeys () 上传文件
seleniumsendKeys不发送所有字符(selenium 发送请求)
我正在使用Java,Selenium和Chrome进行测试自动化。我们的开发人员最近将UI从AngularJS升级到Angular2(不确定是否重要)。但是从那以后,sendKeys在文本字段中输入不完整的字符。这是一个例子:
public void enterCustomerDetails() { txtFirstName.sendKeys("Joh201605130947AM"); txtSurname.sendKeys("Doe201605130947AM"); txtEmail.sendKeys("johndoe@gmail.com"); }
我也尝试使用executeScript。没用 它可以输入完整的字符,但是表格认为该字段为空。
public void forceSendKeys(WebElement element, String text){ if (element != null) ((JavascriptExecutor) this.webDriver).executeScript("arguments[0].value=arguments[1]", element, text);}public void enterCustomerDetails() { forceSendKeys(txtFirstName, "Joh201605130947AM"); forceSendKeys(txtSurname, "Doe201605130947AM"); forceSendKeys(txtEmail, "johndoe@gmail.com"); }
我还尝试在.sendKeys之前使用.click()并增加睡眠时间。他们也没有工作。
它有效,但这意味着我必须将所有代码从sendKeys重写为新函数:
public void sendChar(WebElement element, String value){ element.clear(); for (int i = 0; i < value.length(); i++){ char c = value.charAt(i); String s = new StringBuilder().append(c).toString(); element.sendKeys(s); } }public void enterCustomerDetails() { sendChar(txtFirstName, "Joh201605130947AM"); sendChar(txtSurname, "Doe201605130947AM"); sendChar(txtEmail, "johndoe@gmail.com"); }
如果你们知道更好的方法,请帮忙!:)
答案1
小编典典我认为这是由Angular2问题引起的https://github.com/angular/angular/issues/5808
当输入事件到达得太快时,Angular无法处理它们。
解决方法是,您需要发送单个字符,每个字符之间的延迟很小。
c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?
public static void press(params string[] keys) { foreach (string key in keys) { WebDriver.SwitchTo().ActiveElement().SendKeys(key); Thread.Sleep(TimeSpan.FromSeconds(2)); } }
我称之为:
press(Keys.Tab,Keys.Tab,Keys.Tab);
它工作正常.哪一种更好?
解决方法
public void Wait(double delay,double interval) { // Causes the WebDriver to wait for at least a fixed delay var Now = DateTime.Now; var wait = new webdriverwait(myWebDriver,TimeSpan.FromMilliseconds(delay)); wait.PollingInterval = TimeSpan.FromMilliseconds(interval); wait.Until(wd=> (DateTime.Now - Now) - TimeSpan.FromMilliseconds(delay) > TimeSpan.Zero); }
以某种方式观察DOM总是更好,例如:
public void Wait(Func<IWebDriver,bool> condition,double delay) { var ignoredExceptions = new List<Type>() { typeof(StaleElementReferenceException) }; var wait = new webdriverwait(myWebDriver,TimeSpan.FromMilliseconds(delay))); wait.IgnoreExceptionTypes(ignoredExceptions.ToArray()); wait.Until(condition); } public void SelectionIsDonedisplayingThings() { Wait(driver => driver.FindElements(By.ClassName("selection")).All(x => x.displayed),250); }
c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?
这是DefaultSelenium的构造函数:
ISelenium sele = new DefaultSelenium(**serveraddr**,**serverport**,browser,url2test); sele.Start(); sele.open(); ...
似乎我必须在创建ISelenium对象之前安装Selenium Server.
我的情况是,我正在尝试使用C#Selenium构建一个.exe应用程序,它可以在不同的PC上运行,并且不可能在所有PC上安装Selenium Server(你永远不知道哪个是下一个运行应用程序).
有没有人知道如何在不安装服务器的情况下使用ISelenium / DefaultSelenium?
谢谢!
解决方法
1)对于selenium浏览器启动:
DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setbrowserName("safari"); CommandExecutor executor = new SeleneseCommandExecutor(new URL("http://localhost:4444/"),new URL("http://www.google.com/"),capabilities); WebDriver driver = new RemoteWebDriver(executor,capabilities);
2)对于selenium命令:
// You may use any WebDriver implementation. Firefox is used here as an example WebDriver driver = new FirefoxDriver(); // A "base url",used by selenium to resolve relative URLs String baseUrl = "http://www.google.com"; // Create the Selenium implementation Selenium selenium = new WebDriverBackedSelenium(driver,baseUrl); // Perform actions with selenium selenium.open("http://www.google.com"); selenium.type("name=q","cheese"); selenium.click("name=btnG"); // Get the underlying WebDriver implementation back. This will refer to the // same WebDriver instance as the "driver" variable above. WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver(); //Finally,close the browser. Call stop on the WebDriverBackedSelenium instance //instead of calling driver.quit(). Otherwise,the JVM will continue running after //the browser has been closed. selenium.stop();
描述于此:http://seleniumhq.org/docs/03_webdriver.html
谷歌在C#中有类似的东西.没有其他方法可以实现这一目标.
Java Selenium如何使用sendkeys上传文件
下载和安装AutoIt
文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如autoit、sikuli。
AutoIt , 这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务;
1.打开AutoIt的官网下载
两种下载方法都可以,这里我想下载的是zip,解压出来如下图所示:
立即学习“Java免费学习笔记(深入)”;
点击SciTe文件夹,我们打开脚本编辑器。
打开百度图片上传窗口,打开AutoIt Windows Info 工具,鼠标移动到Finder Tool,按住鼠标左键拖动到需要识别的windows控件上。拖动元素定位器上那个靶点形状按钮到文件上传弹窗,能够捕获到一些元素信息。用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。从显示的结果得知,此控件的Title=“打开”,Class为Edit,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。
打开编辑器,根据控件Finder Tool识别到的信息来调用函数编写脚本;在AutoIt脚本编辑器里输入如下脚本,不要下面我写的备注哈。
我们这里需要知道有以下信息:
1.操作页面的title,用于固定操作的页面。
2.需要填入的信息,在输入框中填入“上传文件的路径及文件名”(windows操作)
3.点击“打开”按钮,实现文件上传。
根据以上所识别的控件信息,利用编辑器SciTE Script Editor,根据AutoIT的语法编写脚本。
实现文件上传需要的几个方法:
ControlFocus ( "窗口标题", "窗口文本", 控件ID) ---->设置输入焦点到指定窗口的某个控件上(即:控件ID“文件名”输入框的id) WinWait ( "窗口标题" [, "窗口文本" [, 超时时间]] ) ---->暂停脚本的执行直至指定窗口存在(出现)为止 ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" ) ---->修改指定控件的文本(即:控件ID“文件名”输入框的id) Sleep ( 延迟 ) ---->使脚本暂停指定时间段 ControlClick ( "窗口标题", "窗口文本", 控件ID [, 按钮] [, 点击次数]] ) ---->向指定控件发送鼠标点击命令(即:控件ID“打开”按钮的id)
其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1(即classnameNN)
ControlFocus(("title","text",controllD)用于识别windows文件上传窗口 ControlFocus("打开","","")向文件名输入框输入本地要上传文件的路径 ControlSetText("打开","","Edit1","C:\Users\DELL\Desktop\test\upload\北京宏哥.jpeg") Sleep(2000)点击上传窗口中的“打开“按钮 ControlClick("打开","","Button1")
保存脚本文件为ChromFileUpload.au3格式,然后在AutoIt脚本编辑器中点击Tools菜单,tools=>go,执行脚本验证(前提是windows窗口必须是打开状态),验证成功,如下图所示:
为了这个脚本能被java 程序调用,需要通过Compile Script to .exe (x64)工具生成exe文件(这个是通过.exe安装包安装的AutoIt)
AutoIt脚本编辑器中点击Tools菜单,选择compile,会在同路径下生成一个.exe的文件(这个是通过解压包安装的AutoIt)
提示Conversion complete转化完成:将ChromeFileUpload.exe拷贝到项目下,待会在Selenium脚本要使用。
java代码
//实现文件上传。通过Runtime的静态方法获取Runtime对象 Runtime runtime = Runtime.getRuntime(); //通过Runtime对象调用exe方法 runtime.exec("C:\Users\DELL\Desktop\test\upload\ChromeFileUpload.exe");
以上就是Java Selenium如何使用sendkeys上传文件的详细内容,更多请关注php中文网其它相关文章!
java-selenium sendkeys () 上传文件
一、sendkeys () 上传
HTML 源码
<td>sendkeys上传</td>
<div id=''pf''><input type=''file'' id=''postfile''/></div>
java 代码
WebElement pf=driver.findElement(By.xpath("//*[@id=''pf'']/input"));
pf.sendKeys("C:\\sendkeys.txt");
今天的关于seleniumsendKeys不发送所有字符和selenium 发送请求的分享已经结束,谢谢您的关注,如果想了解更多关于c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?、c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?、Java Selenium如何使用sendkeys上传文件、java-selenium sendkeys () 上传文件的相关知识,请在本站进行查询。
本文标签: