GVKun编程网logo

seleniumsendKeys不发送所有字符(selenium 发送请求)

4

本文将分享seleniumsendKeys不发送所有字符的详细内容,并且还将对selenium发送请求进行详尽解释,此外,我们还将为大家带来关于c#–我怎样才能让Selenium-WebDriver在

本文将分享seleniumsendKeys不发送所有字符的详细内容,并且还将对selenium 发送请求进行详尽解释,此外,我们还将为大家带来关于c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?、c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?、Java Selenium如何使用sendkeys上传文件、java-selenium sendkeys () 上传文件的相关知识,希望对你有所帮助。

本文目录一览:

seleniumsendKeys不发送所有字符(selenium 发送请求)

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之后等待几秒钟?

c# – 我怎样才能让Selenium-WebDriver在sendkey之后等待几秒钟?

我正在研究C#Selenium-WebDriver.发送密钥后,我想等几秒钟.我执行以下代码等待2秒钟.
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?

c# – 是否可以在不安装Selenium Server的情况下使用ISelenium / DefaultSelenium?

我之前使用IWebDriver控制IE进行测试.但是IWebDriver和IWebElement支持的方法非常有限.我发现属于Selenium命名空间的ISelenium / DefaultSelenium非常有用.如何在不安装Selenium Server的情况下使用它们来控制IE?

这是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?
谢谢!

解决方法

在不使用RC Server的情况下,Java中有一些解决方案:

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上传文件

Java Selenium如何使用sendkeys上传文件

下载和安装AutoIt

文件上传是自动化中棘手的部分,目前selenium并没有提供上传的实现api,所以知道借助外力来完成,如autoit、sikuli。

AutoIt , 这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务;

1.打开AutoIt的官网下载

Java selenium上传文件怎么实现

两种下载方法都可以,这里我想下载的是zip,解压出来如下图所示:

Java selenium上传文件怎么实现

立即学习“Java免费学习笔记(深入)”;

点击SciTe文件夹,我们打开脚本编辑器。

Java selenium上传文件怎么实现

打开百度图片上传窗口,打开AutoIt Windows Info 工具,鼠标移动到Finder Tool,按住鼠标左键拖动到需要识别的windows控件上。拖动元素定位器上那个靶点形状按钮到文件上传弹窗,能够捕获到一些元素信息。用鼠标拖住工具上的Finder Tool的图标(即图中蓝色圈圈部分)到要识别的控件上,控件的唯一标识信息会显示在工具的左侧部分(图中红框标出的部分)。从显示的结果得知,此控件的Title=“打开”,Class为Edit,Instance=1。我们就是利用控件的这些信息,定位控件,编写脚本。

Java selenium上传文件怎么实现

打开编辑器,根据控件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)

Java selenium上传文件怎么实现

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)

Java selenium上传文件怎么实现

提示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 () 上传文件

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 () 上传文件的相关知识,请在本站进行查询。

本文标签: