Selenium 일반 작업: 라디오 체크박스, 드롭다운 목록, 키보드, 스크린샷, 어설션, (명시적 및 암시적) 대기

목차

1. 창을 최대화하세요

2. 라디오 버튼 조작

3. 체크박스 동작

4. 드롭다운 목록

5. 셀레늄 3종 대기

6. 키보드 조작

7. 스크린샷

8. 단언

9. Selenium은 JS 팝업 창 제어를 작동합니다.

10. 마우스 호버 및 릴리즈


1. 창을 최대화하세요

driver.maximize_window()

2. 라디오 버튼 조작

driver.find_element_by_xpath("//input[@value='berry']").click()

3. 체크박스 동작

berrCheckBox1 = driver.find_element_by_xpath('//input[@value="orange"]').click()

4. 드롭다운 목록

driver.find_element_by_name("fruit").click()
time.sleep(2)
driver.find_element_by_id("watermelon").click()

5. 셀레늄 3종 대기

(1) 강제 대기

  디버깅에 일반적으로 사용됨

import time
time.sleep(2)

(2) 암묵적인 대기

  소개:  

  a.driver.implicitly_wait(10), 묵시적으로 시간 설정을 기다리고, 웹 페이지가 일정 시간 내에 로드되는지 여부, 완료되면 다음 단계로 진행하고, 설정된 시간 내에 완료되지 않으면 시간 초과 로딩이 보고됩니다.

  b. 단점은 Ajax 기술이 널리 적용되면서 페이지의 요소가 부분적으로 로드되는 경우가 많기 때문에 스마트하지 않다는 것입니다. 전체 페이지가 로드되어 다음 단계를 실행하기를 기다리지만 암시적 대기는 이 점을 만족시킬 수 없으며 또 다른 점은 암시적
      대기 설정이 전역적이라는 점입니다. 시작하면 전체 프로그램 실행 프로세스 중에 적용되며 페이지가 로드될 때까지 기다립니다. 완료되므로 매번 설정할 필요가 없습니다.

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
    </script>
</head>
<body>
    <p id="p1">这是你爱吃的水果吗?</p>
    <br>
    <br>
    <a href="http://www.sogou.com" target="_blank">sogou 搜索</a>
</body>
from selenium import webdriver
import time
# 导入异常 ,
# NoSuchElementException:找不到页面元素的异常
# TimeoutException:时间异常,超过规定时间,抛出异常
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 异常的获取与处理
import traceback

driver = webdriver.Chrome()
url = "http://www.sogou.com"
driver.get(url)

# 设置隐式等待
driver.implicitly_wait(10)
# 浏览器最大化
driver.maximize_window()
try:
    searchBox = driver.find_element_by_id("query").send_keys("selenium")
    click = driver.find_element_by_id("stb").click()
except(NoSuchElementException,TimeoutException):
    traceback.print_exc()#获取异常

time.sleep(2)
driver.quit()

(3) 명시적 대기

  소개:

  셀레늄 대기 모듈의 WebDriverWait() 메소드는 Until 또는 Until_not 메소드 및 일부 보조 판단 조건과 결합되어 다음과 같은 시나리오를 형성할 수 있습니다. 로케이터 요소가 몇 초마다 표시되는지 확인하고 표시되면 중지합니다. 만약 보이지 않는다면 지정된 시간이 초과될 때까지 계속 대기하며 timeout 예외가 보고되는 것은 물론, 지정된 시간 내에 요소가 보이지 않는지 여부 등 다양한 시나리오로 판단할 수도 있습니다. 등 실제 시나리오에 따라 판단 조건을 선택해야 합니다.

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
        function display_alert() {
            alert("I am an alert box !")
        }
    </script>
</head>
<input>
    <p>请选择你喜欢的水果</p>
    <select name="frult">
        <option id="peach" value="taozi">桃子</option>
        <option id="watermelon" value="西瓜">西瓜</option>
    </select>
    <br>
    <input type="button" onclick="display_alert()" value="Display alert box" />
    <input id="check" type="checkbox">是否喜欢吃水果?</input>
    <br><br>
    <input type="text" id="text" value="今年夏天西瓜很甜!">文本框</input>
</body>
from selenium import webdriver
import time
from selenium.common.exceptions import NoSuchElementException,TimeoutException
import  traceback
import os
#显式等待要用WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
#判断元素是否存在 expected_conditions  as EC:取别名
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
url = 'file:///'+os.path.abspath("test.html")
driver.get(url)

try:
    # 显示等待
    wait = WebDriverWait(driver,10,0.2) #浏览器驱动,10:代表最长超时时间(秒),0.2:间隔刷新时间(不写,0.5刷新一次)
    wait.until(EC.title_is("你喜欢的水果")) #判断标题是否等于 "你喜欢的水果"
    print(u"当前网页的标题是:'你喜欢的水果'") # u utf-8 编码

    #显示等待的另一种写法
    element = WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//input[@value='Display alert box']"))
    element.click()
    time.sleep(2)

    alert = wait.until(EC.alert_is_present())#判断有没有弹出 弹窗
    print(alert.text) #如果打开了,打印当前文本值
    time.sleep(2)
    alert.accept() #点击接受

except TimeoutException as e:
    print(traceback.print_exc())
except NoSuchElementException as e:
    print(traceback.print_exc())
except Exception as e:
    print(traceback.print_exc())

time.sleep(2)
driver.quit()

6. 키보드 조작

(1) 현재 창 위치를 가져오고 설정합니다.

# 获取当前窗口的位置
posttion = driver.get_window_position()
print("初始值",posttion)

# 设置当前窗口位置
driver.set_window_position(x=120,y=120)
print("设置后",driver.get_window_position())

(2) 현재 창 크기를 가져오고 설정합니다.

# 设置当前窗口的大小
#设置新窗口大小,创建句柄,并取名为 'current'
driver.set_window_size(width="520",height="400",windowHandle='current')
print(driver.get_window_size(windowHandle='current'))

(3) title 속성을 이용하여 새롭게 팝업되는 브라우저 창을 식별하고 동작시킵니다.

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os

driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)

# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()

# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)

if len(all_handles)>0:
    try:
        for windouHandle in all_handles:
            # 切换窗口
            driver.switch_to.window(windouHandle)
            print(driver.title)
            #判断当前浏览器窗口的title窗口属性是否等于“搜狗搜索引擎 - 上网从搜狗开始”
            if driver.title == "搜狗搜索引擎 - 上网从搜狗开始":
                #显示等待页面搜索输入框加载完成,然后输入内容“sogou”首页的浏览器窗口被找到
                WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("sogou首页的浏览器窗口被找到")
                time.sleep(2)
    except NoSuchElementException as e:
        print(traceback.print_exc())
    except TimeoutException  as e:
        print(traceback.print_exc())

#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)
#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert  "你喜欢的水果" in driver.title
driver.quit()

(4) 새로 팝업된 브라우저 창을 조작합니다.

<head>
    <meta charset="UTF-8">
    <title>你喜欢的水果</title>
    <script type="text/javascript">
    </script>
</head>
<body>
    <p id="p1">这是你爱吃的水果么</p>
    <br>
    <br>
    <a href="http://www.sogou.com" target="_blank">sogou 搜索</a>
</body>
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException,TimeoutException
# 导入期望场景类
from selenium.webdriver.support import expected_conditions as EC
# 导入BY类
from selenium.webdriver.common.by import By
#显式等待要用WebDriverWait
# 设置等待时间和超时时间
from selenium.webdriver.support.ui import WebDriverWait
# 导入堆栈类
import traceback
import time
# os.path子库以path为入口,用于操作和处理文件路径
import os

driver = webdriver.Chrome()
url= "file:///"+os.path.abspath("test.html")
driver.get(url)

# 显示等待找到页面上链接文字为“sougou搜索”的链接元素,找到后单击
# EC.element_to_be_clickable 判断是否被点击
WebDriverWait(driver,10,0.2).until(EC.element_to_be_clickable((By.LINK_TEXT,"sogou 搜索"))).click()

# 获取当前所有打开的浏览器窗口句柄
all_handles = driver.window_handles
# 打印当前浏览器窗口句柄
print(driver.current_window_handle)
# 打印打开的浏览器窗口的个数
print(len(all_handles))
time.sleep(2)

if len(all_handles)>0:
    try:
        for windouHandle in all_handles:
            # 切换窗口
            driver.switch_to.window(windouHandle)
            # elenium的page_source方法可以获取到页面源码
            PageSource = driver.page_source
            if "搜狗搜索" in PageSource:
                WebDriverWait(driver,10,0.2).until(lambda x:x.find_element_by_id("query")).send_keys("找到了")
                driver.find_element_by_id("stb").click()
                time.sleep(3)

    except NoSuchElementException as e:
        print(traceback.print_exc())
    except TimeoutException  as e:
        print(traceback.print_exc())

#将浏览器窗口切换到默认窗口
driver.switch_to.window(all_handles[0])
#打印切换回默认窗口的title
print(driver.title)

#断言当前浏览器窗口的title属性是“你喜欢的水果”
assert  "你喜欢的水果" in driver.title

driver.quit()

7. 스크린샷

import time
from selenium import webdriver

driver = webdriver.Chrome()
url = "http://www.jg.com"
driver.get(url)
try:
    # 截屏
    result = driver.get_screenshot_as_file(r"d:\test.png")
    print(result)
except IOError as e:
    print(e)
driver.quit()

8. 단언

# 通过断言页面是否存在某些关键字来确定页面而按照预期加载
assert "selenium" in driver.page_source,"页面源码中不存在该关键字!"

9. Selenium은 JS 팝업 창 제어를 작동합니다.

(1) 프롬프트 팝업창

<head>
    <meta charset="UTF-8">
    <title>弹窗控件</title>
    <script>
        function showPro() {
            var str=prompt('你快乐吗?')
            if (str){
                alert('谢谢你的回答!')
            }
        }
    </script>
    <script>
        function showAlert2() {
                alert('谢谢你的回答!')
        }
    </script>
     <script>
        function showAlert() {
                var x;
                x = confirm('确定要删除吗?');
                if (x ==true){
                    alert('点击了确认')
                }else{
                    alert('点击了取消')
                }
        }
    </script>
</head>
<body>
    <div align="center">
        <h4>你好,29快乐</h4>
        <input type="button" onclick="showPro()" value="输入框弹窗按钮"/>
        <input type="button" onclick="showAlert2()" value="提示弹窗按钮"/>
        <input type="button" onclick="showAlert()" value="确认弹窗按钮"/>
        <br><br><br>
        <span id="textSpan">
            <font style="color: green">还需要在努力呀</font>
        </span>
    </div>
</body>
from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[2]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)
driver.quit()

(2) 확인 팝업창

from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
driver.maximize_window()
url="file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取alert对话框
driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗
time.sleep(2)

driver.find_element_by_xpath("/html/body/div/input[3]").click()
alert = driver.switch_to.alert #获取弹窗的方法
time.sleep(2)
print(alert.text)#打印对话框文本
alert.dismiss() #选择 "取消按钮"
print(alert.text)#打印对话框文本
alert.accept()#接受弹窗

driver.quit()

(3)입력 팝업 상자

from selenium import webdriver
import time
import os

driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("index.html")
driver.get(url)

# 获取prompt()输入对话框
driver.find_element_by_xpath("/html/body/div/input[1]").click()
# 获取警告对话框内的文本
prompt = driver.switch_to.alert
time.sleep(2)
# 打印取警告对话框内的文本
print(prompt.text)

# 在输入框内输入"努力"
prompt.send_keys("努力")
time.sleep(2)
# 点击确定按钮
prompt.accept()
# 获取警告框文本
prompt2 = driver.switch_to.alert
print(prompt2.text)

prompt2.dismiss()#取消按钮
driver.quit()

10. 마우스 호버 및 릴리즈

마우스 출시

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
import os

driver = webdriver.Chrome()
url="file:///"+os.path.abspath("mouse_test.html")
driver.get(url)

div = driver.find_element_by_id("div1")
# 在id属性值为'div1'的元素上,执行按下的鼠标左键,并保持
ActionChains(driver).click_and_hold(div).perform()
time.sleep(2)

# 释放按下的鼠标左键
ActionChains(driver).release(div).perform()

time.sleep(2)
driver.quit()

 마우스 오버

from selenium import webdriver
#ActionChains 是自动化执行低级交互的一种方式,例如:鼠标移动,鼠标点按,键盘操作,文本操作等
from selenium.webdriver import ActionChains
import time
import os

driver = webdriver.Chrome()
url = "file:///"+os.path.abspath("test_001.html")
driver.get(url)

link1 = driver.find_element_by_link_text("鼠标指过来1")
link2 = driver.find_element_by_link_text("鼠标指过来2")
p= driver.find_element_by_xpath("//p")

ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)
ActionChains(driver).move_to_element(p).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link2).perform()
time.sleep(2)
ActionChains(driver).move_to_element(link1).perform()
time.sleep(2)

driver.quit()

다음은 제가 모은 비교적 좋은 학습 튜토리얼 자료들입니다. 비록 그다지 귀중하지는 않지만, 필요하신 경우 댓글란 [777]에 메시지를 남겨주시고 가져가시면 됩니다.

정보를 얻고 싶은 친구들은 좋아요+댓글+수집 3번 연속으로 부탁드려요!

3회 연속 진행 후 댓글로 개별 메시지 보내드리겠습니다~

 

추천

출처blog.csdn.net/m0_70618214/article/details/132941750