ความล้มเหลวในการทดสอบ UI - ทั้งองค์ประกอบและลูกหลานไม่มีแป้นพิมพ์โฟกัสบน secureTextField


146

นี่คือกรณีของฉัน:

let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.tap()
passwordSecureTextField.typeText("wrong_password") //here is an error

ความล้มเหลวในการทดสอบ UI - ทั้งองค์ประกอบและลูกหลานไม่มีโฟกัสของแป้นพิมพ์ ธาตุ:

เกิดอะไรขึ้น? นี่คือการทำงานที่ดีสำหรับปกติแต่ปัญหาที่เกิดขึ้นเฉพาะกับtextFields secureTextFieldsวิธีแก้ปัญหาใด ๆ


ฉันได้รับข้อผิดพลาดเดียวกันสำหรับ UIView ที่สอดคล้องกับโปรโตคอล
ma11hew28

และส่วนที่แปลกคือถ้าฉันลองแบบนี้มันก็ใช้ได้ XCUIApplication (). webViews.secureTextFields ["รหัสผ่าน"]. tap () XCUIApplication (). webViews.secureTextFields ["รหัสผ่าน"]. typeText ("ยินดีต้อนรับ")
aurilio

อาจเป็นกรณีที่คุณตั้งค่าตัวระบุการเข้าถึง แต่คุณไม่ได้ตั้งค่า isAccessibilityElement = true
soumil

ฉันได้เพิ่มคำตอบของคำถามที่คล้ายกันที่นี่: stackoverflow.com/a/59637897/2585413 ปัญหาของฉันคือฉันมี UIWindows อื่นที่มีอยู่โดยมีค่า. windowLevel ที่ไม่ดี
nteissler

คำตอบ:


288

ปัญหานี้ทำให้โลกแห่งความเจ็บปวดแก่ฉัน แต่ฉันได้หาวิธีแก้ปัญหาที่เหมาะสมแล้ว ในโปรแกรมจำลองตรวจสอบให้แน่ใจว่า 'ฮาร์ดแวร์ -> คีย์บอร์ด -> เชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์' ปิดอยู่


5
สิ่งนี้ได้แก้ไขปัญหาแล้ว แต่เป็นวิธีแก้ปัญหาที่แย่มากเนื่องจากเราไม่สามารถใช้ CI โดยอัตโนมัติได้
Stanislav Pankevich

28
หากคุณทำการทดสอบบน CI (Jenkins เป็นต้น) คุณสามารถตั้งค่าพารามิเตอร์ต่อไปนี้ในสคริปต์ก่อนที่จะเรียกใช้การทดสอบของคุณ "ค่าเริ่มต้นเขียน com.apple.iphonesimulator ConnectHardwareKeyboard 0"
charlyatwork

7
นี่ไม่ได้ช่วยแก้ปัญหาให้ฉัน ฉันสามารถเห็นช่องข้อความที่ได้รับโฟกัสได้อย่างชัดเจนโดยยกแป้นพิมพ์ขึ้น แต่กรอบการทดสอบไม่สามารถป้อนข้อความโดยใช้ typeText: method
Michael

2
ทำงานให้ฉันใน Xcode 11 แต่การไม่เลือกแป้นพิมพ์เชื่อมต่อฮาร์ดแวร์อาจไม่เพียงพอ นอกจากนี้เพื่อให้แน่ใจว่าแป้นพิมพ์ซอฟต์แวร์ปรากฏขึ้นจริง ๆ (จริงๆแล้วฉันมีสถานการณ์ที่ไม่มีการเชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์และไม่มีการแสดงแป้นพิมพ์ซอฟต์แวร์แม้ว่า textField จะมีโฟกัสและเคอร์เซอร์กะพริบ)
Reinhard Männer

2
ฉันพบสิ่งนี้ใน Xcode 11 เช่นกัน แก้ไขภายในเครื่อง แต่จะตั้งค่าใน CI ได้อย่างไร?
jherg

29

เมื่อเร็ว ๆ นี้เราพบการแฮ็กเพื่อแก้ปัญหาจากคำตอบที่ยอมรับได้อย่างต่อเนื่อง หากต้องการปิดใช้งานการตั้งค่า Simulator: 'ฮาร์ดแวร์ -> คีย์บอร์ด -> เชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์' จากบรรทัดคำสั่งควรเขียน:

defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0

จะไม่ส่งผลต่อโปรแกรมจำลองที่กำลังทำงานอยู่คุณต้องรีสตาร์ทโปรแกรมจำลองหรือเริ่มต้นใหม่เพื่อให้การตั้งค่านั้นมีผล


สิ่งนี้ไม่ได้เปลี่ยนแปลงอะไร
netshark1000

@ netshark1000 ที่อาจมีการเปลี่ยนแปลงด้วย Xcode รุ่นใหม่กว่านี้ผมจะตรวจสอบ
AlexDenisov

1
มีประโยชน์มากฉันต้องการสิ่งที่ตรงกันข้ามกับที่เปิดใช้งานแป้นพิมพ์อยู่เสมอ แต่นี่เป็นสิ่งที่ดีมากขอบคุณ ฉันลงเอยด้วย defaults write com.apple.iphonesimulator ConnectHardwareKeyboard -bool trueแต่แนวคิดเดียวกัน
Laser Hawk

2
ฉันสร้างสคริปต์ในขั้นตอนการสร้างเพื่อทำ แต่ฉันต้องการฆ่าตัวจำลองทั้งหมดดังนั้นฉันจึงทำอย่างนั้น:killall "Simulator"; defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0;
Wagner Sales

ดูเหมือนจะใช้ไม่ได้อีกต่อไปคีย์เปลี่ยนไปหรือไม่ ?? @AlexDenisov
Simon McLoughlin

16

ฉันได้เขียนส่วนขยายขนาดเล็ก (Swift) ซึ่งเหมาะกับฉัน นี่คือรหัส:

extension XCTestCase {

    func tapElementAndWaitForKeyboardToAppear(element: XCUIElement) {
        let keyboard = XCUIApplication().keyboards.element
        while (true) {
            element.tap()
            if keyboard.exists {
                break;
            }
            NSRunLoop.currentRunLoop().runUntilDate(NSDate(timeIntervalSinceNow: 0.5))
        }
    }
}

แนวคิดหลักคือการแตะองค์ประกอบ (ช่องข้อความ) ต่อไปก่อนที่แป้นพิมพ์จะปรากฏขึ้น


ตอนนี้ใช้ไม่ได้กับฉัน ฉันมี Xcode 7.2 (7C68) คุณมีเวอร์ชันอะไร การแก้ปัญหานี้ที่เราพบ CI ทำงานเรา: stackoverflow.com/a/34812979/598057
Stanislav Pankevich

เพื่อยืนยันอีกครั้ง: ตัวช่วยนี้เหมาะสำหรับคุณสำหรับฟิลด์ข้อความรหัสผ่านที่ปลอดภัยไม่ใช่แค่ช่องข้อความปกติ?
Stanislav Pankevich

ใช่มันใช้ได้กับช่องข้อความทั้งสองประเภท: ปกติและปลอดภัย
berezhnyi oleksandr

1
ปัญหาเกี่ยวกับคำตอบนี้คือมันใช้การหน่วงเวลาแบบฮาร์ดโค้ด ให้ใช้รูปแบบการรอสำหรับความคาดหวังกับองค์ประกอบแป้นพิมพ์แทน
user1122069

12

สตานิสลาฟมีความคิดที่ถูกต้อง

ในสภาพแวดล้อมแบบทีมคุณต้องการสิ่งที่จะทำงานโดยอัตโนมัติ ฉันได้แก้ไขที่นี่ในบล็อกของฉัน

โดยทั่วไปคุณเพียงแค่วาง:

UIPasteboard.generalPasteboard().string = "Their password"
let passwordSecureTextField = app.secureTextFields["password"]
passwordSecureTextField.pressForDuration(1.1)
app.menuItems["Paste"].tap()

ขอขอบคุณสำหรับการแบ่งปันวิธีการแก้ปัญหาของคุณ. น่าเสียดายที่ตอนนี้ใช้งานไม่ได้สำหรับฉัน ฉันมี Xcode 7.2 (7C68) แล้วคุณล่ะ? ดูวิธีการแก้ปัญหาอื่น ๆ ที่เราพบ CI: stackoverflow.com/questions/32184837/...
Stanislav Pankevich

8

สาเหตุอีกประการหนึ่งของข้อผิดพลาดนี้คือหากมีมุมมองหลักของฟิลด์ข้อความที่คุณพยายามป้อนข้อความที่ตั้งค่าเป็นองค์ประกอบการช่วยสำหรับการเข้าถึง ( view.isAccessibilityElement = true) ในกรณีนี้ XCTest ไม่สามารถรับจุดจับบนมุมมองย่อยเพื่อป้อนข้อความและส่งกลับข้อผิดพลาด

ความล้มเหลวในการทดสอบ UI - ทั้งองค์ประกอบและลูกหลานไม่มีโฟกัสของแป้นพิมพ์

ไม่ใช่ว่าไม่มีองค์ประกอบใดที่มีโฟกัส (ดังที่คุณมักจะเห็นแป้นพิมพ์ขึ้นและเคอร์เซอร์กะพริบใน UITextField) แต่ไม่มีองค์ประกอบใดที่สามารถเข้าถึงโฟกัสได้ ฉันพบสิ่งนี้เมื่อพยายามป้อนข้อความใน UISearchBar แถบค้นหาไม่ใช่ช่องข้อความเมื่อตั้งค่าเป็นองค์ประกอบการช่วยสำหรับการเข้าถึงการเข้าถึง UITextField ที่อยู่ภายใต้จะถูกบล็อก เพื่อแก้ปัญหานี้searchBar.accessibilityIdentifier = "My Identifier"ได้รับการตั้งอยู่บนUISearchBarแต่ไม่ได้รับการตั้งค่าให้isAccessibilityElement trueหลังจากนี้รหัสทดสอบของแบบฟอร์ม:

app.otherElements["My Identifier"].tap()
app.otherElements["My Identifier"].typeText("sample text")

ผลงาน


7

มันเกิดขึ้นกับฉันหลายครั้ง คุณต้องปิดการใช้งาน Keyboard Hardware และ Layout เดียวกันกับ OSX ใน Simulator ของคุณ

ฮาร์ดแวร์ / คีย์บอร์ด (ปิดใช้งานทั้งหมด)

หลังจากนั้นซอฟต์แวร์แป้นพิมพ์จะไม่ปิดและการทดสอบของคุณสามารถพิมพ์ข้อความได้

ปิดการใช้งานฮาร์ดแวร์


5

ใช้โหมดสลีประหว่างการเปิดแอปและพิมพ์ข้อมูลในช่องข้อความดังนี้:

sleep(2)

ในกรณีของฉันฉันได้รับข้อผิดพลาดนี้ทุกครั้งและมีเพียงโซลูชันนี้เท่านั้นที่ช่วยฉันได้


2
ปัญหาคือถ้าคุณมีการทดสอบ UI จำนวนมากที่ดำเนินการบางอย่างเช่นการเข้าสู่ระบบครั้งแรกสิ่งนี้จะเพิ่มค่าใช้จ่ายจำนวนมากให้กับการทดสอบ CI ของคุณ
delta2flat

5

ในกรณีของฉันสิ่งนี้Hardware -> Keyboard -> Connect Hardware Keyboard-> การปิดใช้งานไม่ได้ผลสำหรับฉัน

แต่พอทำตาม

1) Hardware -> Keyboard -> Connect Hardware Keyboard-> เปิดใช้งานและเรียกใช้แอพพลิเค
2) Hardware -> Keyboard -> Connect Hardware Keyboard-> ปิดการใช้งาน

มันได้ผลสำหรับฉัน


ทำงานให้ฉัน MAN ฉันเกลียดด้านนี้ของ XCode!
bwobbones

4

นี่อาจช่วยได้: ฉันแค่เพิ่มการดำเนินการ "แตะ" ก่อนเกิดข้อผิดพลาด นั่นคือทั้งหมด :)

[app.textFields[@"theTitle"] tap];
[app.textFields[@"theTitle"] typeText:@"kk"];

2
สิ่งนี้ใช้ไม่ได้กับฟิลด์ข้อความรหัสผ่านที่ปลอดภัย
Stanislav Pankevich

สิ่งนี้ใช้ได้ผลกับฟิลด์ข้อความรหัสผ่านที่ปลอดภัยของฉันก็ใช้ได้ ทางออกที่ดี.
Travis M.

4
func pasteTextFieldText(app:XCUIApplication, element:XCUIElement, value:String, clearText:Bool) {
    // Get the password into the pasteboard buffer
    UIPasteboard.generalPasteboard().string = value

    // Bring up the popup menu on the password field
    element.tap()

    if clearText {
        element.buttons["Clear text"].tap()
    }

    element.doubleTap()

    // Tap the Paste button to input the password
    app.menuItems["Paste"].tap()
}

4

บันทึกกรณีที่คุณต้องการแป้นพิมพ์หรือไม่ต้องติดแป้นพิมพ์ แต่ทำสิ่งต่อไปนี้ก่อนเล่นทดสอบ

ควรยกเลิกการเลือกตัวเลือกต่อไปนี้ (เชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์) ขณะเล่นการทดสอบ

ป้อนคำอธิบายภาพที่นี่


3

[การโพสต์ความคิดเห็นของBartłomiejSemańczykใหม่เพื่อเป็นคำตอบเพราะมันช่วยแก้ปัญหาให้ฉันได้]

ฉันต้องทำ Simulator> รีเซ็ตเนื้อหาและการตั้งค่าในแถบเมนูเครื่องจำลองเพื่อให้สิ่งนี้เริ่มใช้ได้


การรีเซ็ตเครื่องจำลองช่วยฉันด้วย สิ่งที่น่าสนใจคือปัญหาเกิดขึ้นในเครื่องจำลองเท่านั้นในขณะที่การทดสอบเดียวกัน (แตะ texfield ตามด้วยการพิมพ์อักขระ) ทำงานได้ดีบนอุปกรณ์
Christian

1

บางครั้งช่องข้อความจะไม่ถูกนำมาใช้เป็นช่องข้อความหรือรวมไว้ในองค์ประกอบ UI อื่นและไม่สามารถเข้าถึงได้ง่าย นี่คือวิธีแก้ปัญหา:

//XCUIApplication().scrollViews.otherElements.staticTexts["Email"] the locator for the element
RegistrationScreenStep1of2.emailTextField.tap()
let keys = app.keys
 keys["p"].tap() //type the keys that you need
 
 //If you stored your data somewhere and need to access that string //you can cats your string to an array and then pass the index //number to key[]
 
 let newUserEmail = Array(newPatient.email())
 let password = Array(newPatient.password)
 
 //When you cast your string to an array the elements of the array //are Character so you would need to cast them into string otherwise //Xcode will compain. 
 
 let keys = app.keys
     keys[String(newUserEmail[0])].tap()
     keys[String(newUserEmail[1])].tap()
     keys[String(newUserEmail[2])].tap()
     keys[String(newUserEmail[3])].tap()
     keys[String(newUserEmail[4])].tap()
     keys[String(newUserEmail[5])].tap()       


0

บรรทัดแรกของคุณเป็นเพียงคำจำกัดความของแบบสอบถามซึ่งไม่ได้หมายความว่าอย่างนั้นpasswordSecureTextFieldจะมีอยู่จริง

บรรทัดที่สองของคุณจะเรียกใช้แบบสอบถามแบบไดนามิกและพยายาม (อีกครั้ง) ผูกคิวรีกับองค์ประกอบ UI คุณควรวางเบรกพอยต์ไว้และตรวจสอบว่าพบองค์ประกอบเดียวเท่านั้น หรือเพียงแค่ใช้คำยืนยัน:

XCTAssertFalse(passwordSecureTextField.exists);

มิฉะนั้นจะดูโอเคtapควรบังคับให้มองเห็นแป้นพิมพ์จากนั้นtypeTextควรใช้งานได้ บันทึกข้อผิดพลาดควรบอกข้อมูลเพิ่มเติม


1
passwordSecureTextFieldมีอยู่ ฉันแก้ไขปัญหาแล้ว แต่กำลังล้างหน่วยความจำและเขียนบรรทัดเหล่านั้นใหม่อีกครั้ง แปลก แต่ได้ผล
BartłomiejSemańczyk

ยินดีรับฟังการแก้ไข! ฉันพบปัญหาที่คล้ายกันเมื่อวานนี้กับเบต้า 6 :)
JOM

เบต้า 6? :-) จริงเหรอ? ฉันมีแค่ 5 คน :)
BartłomiejSemańczyk

คุณยุ่งกับการเขียนโค้ด :) เบต้า 6 ไม่ได้บันทึกtapให้ฉันใช้เวลาพอสมควรในการคิดออก ฝึกดีบั๊ก!
JOM

คุณอาจจะรู้คำตอบสำหรับสิ่งนี้stackoverflow.com/questions/32219015/… ?
BartłomiejSemańczyk

0

อย่าสับสนมีปัญหาที่พบสาเหตุคือคุณบันทึกเวลาทดสอบแอปของคุณจะเชื่อมต่อแป้นพิมพ์ฮาร์ดแวร์ในขณะที่เครื่องจำลองเวลาทดสอบอัตโนมัติใช้แป้นพิมพ์ซอฟต์แวร์เท่านั้น ดังนั้นสำหรับวิธีแก้ไขปัญหานี้ เพียงใช้แป้นพิมพ์ซอฟต์แวร์ในเวลาบันทึกของคุณ คุณสามารถมองเห็นความมหัศจรรย์


0

ปัญหาสำหรับฉันก็เหมือนกับ Ted จริงๆแล้วหากช่องรหัสผ่านถูกแตะหลังจากฟิลด์ล็อกอินและฮาร์ดแวร์ KB เปิดอยู่แป้นพิมพ์ซอฟต์แวร์จะปิดตัวเองเมื่อแตะฟิลด์ที่สองและไม่เฉพาะสำหรับการทดสอบ UI

หลังจากยุ่งกับ AppleScript มาระยะหนึ่งแล้วนี่คือสิ่งที่ฉันคิดขึ้น (ยินดีต้อนรับการปรับปรุง):

tell application "Simulator" activate tell application "System Events" try tell process "Simulator" tell menu bar 1 tell menu bar item "Hardware" tell menu "Hardware" tell menu item "Keyboard" tell menu "Keyboard" set menuItem to menu item "Connect Hardware Keyboard" tell menu item "Connect Hardware Keyboard" set checkboxStatus to value of attribute "AXMenuItemMarkChar" of menuItem if checkboxStatus is equal to "✓" then click end if end tell end tell end tell end tell end tell end tell end tell on error tell application "System Preferences" activate set securityPane to pane id "com.apple.preference.security" tell securityPane to reveal anchor "Privacy_Accessibility" display dialog "Xcode needs Universal access to disable hardware keyboard during tests(otherwise tests may fail because of focus issues)" end tell end try end tell end tell

สร้างไฟล์สคริปต์ที่มีโค้ดด้านบนและเพิ่มไปยังเป้าหมายที่จำเป็น (อาจเป็นการทดสอบ UI ที่กำหนดเป้าหมายเท่านั้นคุณอาจต้องการเพิ่มสคริปต์ที่คล้ายกันในเป้าหมายการพัฒนาของคุณเพื่อเปิดใช้งานแป้นพิมพ์ HW อีกครั้งในระหว่างการพัฒนา) คุณควรเพิ่มRun Scriptเฟสในขั้นตอนการสร้างและใช้มันดังนี้: osascript Path/To/Script/script_name.applescript


0

เราพบข้อผิดพลาดเดียวกันเมื่อการตั้งaccessibilityIdentifierค่าสำหรับมุมมองที่กำหนดเอง ( UIStackViewsubclass) ที่มีUIControlsubviews ในกรณีนั้น XCTest ไม่สามารถรับโฟกัสของแป้นพิมพ์สำหรับองค์ประกอบที่สืบเนื่องมาได้

วิธีแก้ปัญหาของเราคือเพียงแค่ลบaccessibilityIdentifierมุมมองหลักของเราและตั้งค่าaccessibilityIdentifierสำหรับมุมมองย่อยผ่านคุณสมบัติเฉพาะ


0

อีกคำตอบหนึ่ง แต่สำหรับเราปัญหาคือมุมมองนั้นใกล้เกินไปกับมุมมองอื่นที่มีเครื่องมือจดจำท่าทางอยู่ เราพบว่าเราต้องการให้มุมมองห่างออกไปอย่างน้อย 20 พิกเซล (ในกรณีของเราด้านล่าง) แท้จริง 15 ไม่ได้ผลและ 20 หรือมากกว่านั้นทำ นี่เป็นเรื่องแปลกที่ฉันจะยอมรับ แต่เรามี UITextView บางตัวที่ใช้งานได้และบางส่วนที่ไม่ใช่และทั้งหมดอยู่ภายใต้ผู้ปกครองเดียวกันและตำแหน่งอื่น ๆ ที่เหมือนกัน (และแน่นอนชื่อตัวแปร) แป้นพิมพ์เปิดหรือปิดหรืออะไรก็ตามที่ไม่มีความแตกต่าง การช่วยการเข้าถึงแสดงฟิลด์ เรารีสตาร์ทคอมพิวเตอร์ เราสร้างงานที่สะอาด แหล่งชำระเงินสด


0

ฉันวิ่งเข้าไปในปัญหานี้และก็สามารถที่จะแก้ไขได้ในสถานการณ์ของฉันโดยการใช้วิธีการโพสต์โดย @AlexDenisov และเพิ่มลงในก่อนการกระทำของฉันสำหรับการทำงานและการทดสอบ

ป้อนคำอธิบายภาพที่นี่


0

ไม่จำเป็นต้องเปิด / ปิดคีย์บอร์ดใน I / O อย่าใช้ .typeText สำหรับ secureTextField เพียงแค่ใช้

app.keys["p"].tap()
app.keys["a"].tap()
app.keys["s"].tap()
app.keys["s"].tap()

โบนัส: คุณได้รับเสียงคีย์บอร์ดคลิก :)


0

สุดท้ายฉันเขียนสคริปต์ซึ่งแก้ไขไฟล์. plist ของ Simulator และตั้งค่าไฟล์ ConnectHardwareKeyboardคุณสมบัติเป็นเท็จสำหรับโปรแกรมจำลองที่เลือก คุณได้ยินถูกต้องมันเปลี่ยนคุณสมบัติสำหรับโปรแกรมจำลองที่เลือกไว้โดยเฉพาะในพจนานุกรม "DevicePreferences" แทนที่จะแก้ไขคุณสมบัติส่วนกลาง

ขั้นแรกสร้างเชลล์สคริปต์ชื่อdisable-hardware-keyboard.shโดยมีเนื้อหาต่อไปนี้ คุณสามารถวางไว้ใน "YourProject / xyzUITests / Scripts /":

echo "Script: Set ConnectHardwareKeyboard to false for given Simulator UDID"

if [[ $1 != *-*-*-*-* ]]; then
    echo "Pass device udid as first argument."
    exit 1
else
    DEVICE_ID=$1
fi

DEVICE_PREFERENCES_VALUE='<dict><key>ConnectHardwareKeyboard</key><false/></dict>'
killall Simulator # kill restart the simulator to make the plist changes picked up
defaults write com.apple.iphonesimulator DevicePreferences -dict-add $DEVICE_ID $DEVICE_PREFERENCES_VALUE
open -a Simulator # IMPORTANT

ตอนนี้ทำตามขั้นตอนเหล่านี้เพื่อเรียกมันโดยส่ง udid ของตัวจำลองที่เลือกเป็นอาร์กิวเมนต์:

  1. แก้ไขชุดรูปแบบ Xcode ของคุณ (หรือ UI จะทดสอบรูปแบบเฉพาะหากคุณมี)
  2. ไปที่: ทดสอบ> ก่อนการดำเนินการ
  3. เพิ่มสคริปต์ใหม่โดยแตะสัญลักษณ์ "+"> "New Run Script Action"
  4. สิ่งสำคัญ:ภายในเมนูแบบเลื่อนลง "ให้การตั้งค่าบิวด์จาก" ให้เลือกเป้าหมายแอปหลักของคุณไม่ใช่เป้าหมายการทดสอบ UI
  5. ตอนนี้เพิ่มสคริปต์ต่อไปนี้ในพื้นที่ข้อความด้านล่าง

สคริปต์ภายในการทดสอบ> การดำเนินการล่วงหน้า:

#!/bin/sh
# $PROJECT_DIR is path to your source project. This is provided when we select "Provide build settings from" to "AppTarget"
# $TARGET_DEVICE_IDENTIFIER is the UDID of the selected simulator
sh $PROJECT_DIR/xyzUITests/Scripts/disable-hardware-keyboard.sh $TARGET_DEVICE_IDENTIFIER

# In order to see output of above script, append following with it:
#  | tee ~/Desktop/ui-test-scheme-prescript.txt

เวลาทดสอบ:

  1. เปิดตัวจำลอง
  2. เปิดใช้งานแป้นพิมพ์ฮาร์ดแวร์สำหรับมัน
  3. เรียกใช้การทดสอบ UI ด้วยการโต้ตอบกับแป้นพิมพ์ สังเกตตัวจำลองรีสตาร์ทและแป้นพิมพ์ฮาร์ดแวร์ถูกปิดใช้งาน และการโต้ตอบกับแป้นพิมพ์ของการทดสอบทำงานได้ดี :)

-1

มีปัญหาเดียวกันกับ Securetextfields ตัวเลือกเชื่อมต่อฮาร์ดแวร์ในโปรแกรมจำลองของฉันเคยเป็น แต่ยังคงพบปัญหา ในที่สุดสิ่งนี้ก็ใช้ได้ผลสำหรับฉัน (Swift 3):

 let enterPasswordSecureTextField = app.secureTextFields["Enter Password"]
    enterPasswordSecureTextField.tap()
    enterPasswordSecureTextField.typeText("12345678")

1
อะไรคือความแตกต่างระหว่างรหัสของคุณและรหัสที่ถามในคำถาม
Shivam Pokhriyal

-1

สิ่งที่แก้ไขปัญหานี้สำหรับฉันคือการเพิ่มการนอนหลับ 1 วินาที:

let textField = app.textFields["identifier"]
textField.tap()
sleep(1)
textField.typeText(text)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.