The usual method of operation selenium python (2) based on

Window switching over 10   

 

During the operation page sometimes click a link will pop up a new window, then you need to switch to a new host open window to operate. Providing WebDriver switch_to.window () method may be implemented to switch between different windows. Baidu Baidu home and to registration page, for example, below the switching between the two windows.

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

# Obtain Baidu search window handle
sreach_windows = driver.current_window_handle

driver.find_element_by_link_text ( 'login') .click ()
driver.find_element_by_link_text ( "Register Now") .click ()

# Get all currently open window handle
all_handles = driver.window_handles

# 进入注册窗口
for handle in all_handles:
    if handle != sreach_windows:
        driver.switch_to.window(handle)
        print('now register window!')
        driver.find_element_by_name("account").send_keys('username')
        driver.find_element_by_name('password').send_keys('password')
        time.sleep(2)
        # ……

driver.quit()

The new method of the present embodiment involved the following:

· Current_window_handle: get the current window handle.

· Window_handles: return the handle of all windows to the current session.

· Switch_to.window (): for switching to the appropriate window, similar to the previous one in switch_to.frame (), the former is used to switch between different window, which is used to switch between different form.

 

 

11 alert box processing   

 

In WebDriver processing the generated alert JavaScript, Confirm very simple and prompt, which would be used to locate a method switch_to.alert alert / confirm / prompt, and then operate using text / accept / dismiss / send_keys like.

· Text: return a text message alert / confirm / prompt in.

· Accept (): accept the existing alert box.

· Dismiss (): the dissolution of the existing alert box.

· Send_keys (keysToSend): send a text to alert box. keysToSend: will send a text to the alert box.

Below, provided Baidu search window that can not be positioned by the tool, this time can accept the pop through switch_to_alert () method.

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# Hover to "set" Link
link = driver.find_element_by_link_text ( 'set')
ActionChains (Driver) .move_to_element (Link) .perform ()

# Open Search settings
driver.find_element_by_link_text ( "Search Settings") .click ()

# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)

# Accept the warning box
driver.switch_to.alert.accept ()

driver.quit()

Obtained by switch_to_alert () method box warning on the current page, and use the accept () method accepts a warning box.

 

12 drop-down box to select   

Sometimes we encounter the drop-down box, WebDriver Select provides classes to handle the drop-down box. The drop-down box Baidu search settings, as shown below:

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')

# Mouse over to "Settings" link
driver.find_element_by_link_text ( 'set') .click ()
SLEEP (1)
# Open Search settings
driver.find_element_by_link_text ( "Search Settings") .click ()
SLEEP (2)

# Show the number of search results
SEL = driver.find_element_by_xpath ( "SELECT // [@ ID = 'NR']")
the Select (SEL) .select_by_value ('50 ') Display # 50
# ......

driver.quit()

Select类用于定位select标签。 select_by_value() 方法用于定位下接选项中的value值。

 

13 文件上传   

 

对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。

创建upfile.html文件,代码如下:

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>upload_file</title>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
  <div class="row-fluid">
        <div class="span6 well">
        <h3>upload_file</h3>
          <input type="file" name="file" />
        </div>
  </div>
</body>
<script src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></scrip>
</html>

通过浏览器打开upfile.html文件,功能如下图。

接下来通过send_keys()方法来实现文件上传。

from selenium import webdriver
import os

driver = webdriver.Firefox()
file_path = 'file:///' + os.path.abspath('upfile.html')
driver.get(file_path)

# 定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')

driver.quit()

 

14 cookie操作   

 

有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试进行的。WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。

WebDriver操作cookie的方法:

·         get_cookies(): 获得所有cookie信息。

·         get_cookie(name): 返回字典的key为“name”的cookie信息。

·         add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。

·         delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。

·         delete_all_cookies(): 删除所有cookie信息。

下面通过get_cookies()来获取当前浏览器的cookie信息。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.youdao.com")

# 获得cookie信息
cookie= driver.get_cookies()
# 将获得cookie的信息打印
print(cookie)

driver.quit()

从执行结果可以看出,cookie数据是以字典的形式进行存放的。知道了cookie的存放形式,接下来我们就可以按照这种形式向浏览器中写入cookie信息。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.youdao.com")

# 向cookie的name 和value中添加会话信息
driver.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbb'})

# 遍历cookies中的name 和value信息并打印,当然还有上面添加的信息
for cookie in driver.get_cookies():
    print("%s -> %s" % (cookie['name'], cookie['value']))

driver.quit()

输出结果:
======================== RESTART: =========================
YOUDAO_MOBILE_ACCESS_TYPE -> 1
_PREF_ANONYUSER__MYTH -> aGFzbG9nZ2VkPXRydWU=
OUTFOX_SEARCH_USER_ID -> [email protected]
JSESSIONID -> abc7qSE_SBGsVgnVLBvcu
key-aaaaaaa -> value-bbbbbb

从执行结果可以看到,最后一条cookie信息是在脚本执行过程中通过add_cookie()方法添加的。通过遍历得到所有的cookie信息,从而找到key为“name”和“value”的特定cookie的value。

 

15 调用JavaScript代码   

虽然WebDriver提供了操作浏览器的前进和后退方法,但对于浏览器滚动条并没有提供相应的操作方法。在这种情况下,就可以借助JavaScript来控制浏览器的滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码。

用于调整浏览器滚动条位置的JavaScript代码如下:

<!-- window.scrollTo(左边距,上边距); -->
window.scrollTo(0,450);

window.scrollTo()方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距。其代码如下:

from selenium import webdriver
from time import sleep

# 访问百度
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")

# 设置浏览器窗口大小
driver.set_window_size(500, 500)

# 搜索
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(2)

# 通过javascript设置浏览器窗口的滚动条位置
js="window.scrollTo(100,450);"
driver.execute_script(js)
sleep(3)

driver.quit()

通过浏览器打开百度进行搜索,并且提前通过set_window_size()方法将浏览器窗口设置为固定宽高显示,目的是让窗口出现水平和垂直滚动条。然后通过execute_script()方法执行JavaScripts代码来移动滚动条的位置。 

16 窗口截图   

 

自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。

from selenium import webdriver
from time import sleep

driver = webdriver.Firefox()
driver.get('http://www.baidu.com')

driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(2)

# 截取当前窗口,并指定截图图片的保存位置
driver.get_screenshot_as_file("D:\\baidu_img.jpg")

driver.quit()

脚本运行完成后打开D盘,就可以找到baidu_img.jpg图片文件了。

17 关闭浏览器   

在前面的例子中我们一直使用quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。除此之外,WebDriver还提供了close()方法,用来关闭当前窗口。例多窗口的处理,在用例执行的过程中打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

·         close() 关闭单个窗口

·         quit() 关闭所有窗口

Guess you like

Origin www.cnblogs.com/xiaogongjin/p/11490085.html